1.1 目录
(1)目录
(2)题目要求
(3)原理
(4)代码
1.2 题目要求
Design a 1-12 counter with the following inputs and outputs:
- Reset Synchronous active-high reset that forces the counter to 1
- Enable Set high for the counter to run
- Clk Positive edge-triggered clock input
- Q[3:0] The output of the counter
- c_enable, c_load, c_d[3:0] Control signals going to the provided 4-bit counter, so correct operation can be verified.
You have the following components available:
- the 4-bit binary counter (count4) below, which has Enable and synchronous parallel-load inputs (load has higher priority than enable). The count4 module is provided to you. Instantiate it in your circuit.
- logic gate
解释:就是给你一个4位二进制计数器(它自己本身可以构建0-15的计数器,因为4位1为15),让你使用这个 4位二进制计数器构建一个1-12的计数器。模块给你了,你直接实例化就行。
1.3 原理
问题:因为给的4位计数器可以计数0-15,而你需要1-12所以我们需要了解这个4位二进制计数器。它的具体原理可以自行百度。我给大家解释一下,它给的4位二进制计数器各个端口的意义。
module count4(
input clk,
input enable,
input load,
input [3:0] d,
output reg [3:0] Q
);
(1)enable是模块的使能信号,为高电平时模块工作进行计数。
(2)load为1时可以对该模块进行置数(意思就是它为高电平时,可以给计数模块一个初值(就是当时的输入d),让它从这个初值开始进行计数,我们本题是让从1进行计数所以把d和load置为1就行。)
(3)d就是模块的初始计数起点值。
(4)Q就是输出的计数值
1.4 代码
module top_module (
input clk,
input reset,
input enable,
output [3:0] Q,
output c_enable,
output c_load,
output [3:0] c_d
);
always@(*)
begin
if(reset == 1'b1)
begin
c_load <= 1'b1;
c_d <= 4'd1;
end
else
begin
c_load <= 1'b0;//置零原因是为了防止再次置数
if((enable == 1'b1) && (Q == 4'd12))
begin
c_load <= 1'b1;
c_d <= 4'd1;
end
end
end
assign c_enable = enable;
count4 count4_inst(
.clk (clk) ,
.enable (enable) ,
.load (c_load) ,
.d (c_d) ,
.Q (Q)
);
endmodule