HDLbits 刷题答案 3.2.2 Counters(上)

3.2.2 Counters

3.2.2.1 Count15

创建一个计数器,当同步复位信号reset1时,清零

module top_module (
    input clk,
    input reset,      // Synchronous active-high reset
    output [3:0] q);
    
    always @ (posedge clk) begin
        if(reset) begin
           q <= 4'd0; 
        end
        else begin
            if(q == 4'd15) begin
               q <= 4'd0; 
            end
            else begin
               q <= q + 1'b1; 
            end
        end
    end
endmodule

3.2.2.2 Decade counter

模10计数器


module top_module (
    input clk,
    input reset,        // Synchronous active-high reset
    output [3:0] q);
    
    always @ (posedge clk) begin
        if(reset) begin
           q <= 4'd0; 
        end
        else begin
            if(q == 4'd9) begin
               q <= 4'd0; 
            end
            else begin
               q <= q + 1; 
            end
        end
    end
endmodule

3.2.2.3 Decade counter again
从1-10计数

module top_module (
    input clk,
    input reset,
    output [3:0] q);
    
    always @ (posedge clk) begin
        if(reset) begin
           q <= 4'd1; 
        end
        else begin
            if(q == 4'd10) begin
                q <= 4'd1;
            end
            else begin
               q <= q + 1;
            end
        end
    end
endmodule

3.2.2.3 Slow decade counter

带使能端和复位端的模10计数器


module top_module (
    input clk,
    input slowena,
    input reset,
    output [3:0] q);
    
    always @ (posedge clk) begin
        if(reset) begin
           q <= 4'd0; 
        end 
        else begin
            if(slowena) begin
                if(q == 4'd9) begin
                   q <= 4'd0; 
                end
                else begin
                    q <= q + 1;
                end
            end
            else begin
               q <= q; 
            end
        end
    end
endmodule

3.2.2.4 Counter1-12

根据以下输入输出信号设计一个计算1~12的计数器

Reset:同步复位信号,高复位,将计数器复位为1.

Enable:使能信号高有效

Clk:时钟上升沿触发计数器工作

Q[3:0]:计数器输出

c_enable, c_load, c_d[3:0]:题目中给我们提供了一个4-bit的计数器,这三个信号是用于该4-bit计数器的控制信号。

题目提供给我们4-bit计数器

有enable信号,带复位和置位的计数器,将该计数器例化至我们的代码中。
再用一些其他的逻辑门来完成本题


module top_module (
    input clk,
    input reset,
    input enable,
    output [3:0] Q,
    output c_enable,
    output c_load,
    output [3:0] c_d
); //
    assign c_enable = enable;
    assign c_load = reset | (Q == 4'd12 && enable == 1'b1);
    assign c_d = c_load ? 4'd1 : 4'd0;
    count4 the_counter (.clk(clk), .enable(c_enable), .load(c_load), .d(c_d), .Q(Q)/*, ... */ );
endmodule

这个我没看懂,从网上找的代码

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容