实验要求
一、实验目的 1、 学习 Verilog HDL 基本时序电路设计。 2、 学习并掌握时序电路的状态观测方法。 3、 学习并掌握时序电路的时序波形观测方法。 二、实验内容 设计一个 1 位十进制可逆计数、译码、显示电路。 1. 基本功能及指标要求 (1) 控制信号 upd==1 时计数器 0 -> 9 循环计数,upd==0 时,9 -> 0 循环计数; (2) 具有异步清零(clr)、同步置数(load)、同步使能(en)功能; (3) 进位(加计数时)、借位(减计数时)功能,加计数时 CO=1@Q==9,减计数 时 CO=1@Q==0;
模块代码
module ljq_2344_4_1 (codeout, Q, clkin, clr, CO, upd, en, load, data);
input clkin, clr, upd, en, load;
input [3: 0] data;
output [6: 0] codeout;
output [3: 0] Q;
output CO;
ljq_2344_4_1_b decimal_counter(clkin, clr, Q, CO, upd, en, load, data);
ljq_2344_4_1_a decoder(codeout, Q);
endmodule
module ljq_2344_4_1_a (codeout, Indec); //译码器
input [3: 0] Indec;
output [6: 0] codeout;
reg [6: 0] codeout;
always@(Indec)
begin
case(Indec)
4'b0000: codeout = 7'b111_1110;
4'b0001: codeout = 7'b011_0000;
4'b0010: codeout = 7'b110_1101;
4'b0011: codeout = 7'b111_1001;
4'b0100: codeout = 7'b011_0011;
4'b0101: codeout = 7'b101_1011;
4'b0110: codeout = 7'b101_1111;
4'b0111: codeout = 7'b111_0000;
4'b1000: codeout = 7'b111_1111;
4'b1001: codeout = 7'b111_1011;
default: codeout = 7'bx;
endcase
end
endmodule
module ljq_2344_4_1_b (clkin, clr, Q, CO, upd, en, load, data); //十进制计数器
input clkin, clr, upd, en, load; // upd高电平升序,低电平降序
input [3: 0] data;
output [3: 0] Q;
reg [3: 0] Q;
output wire CO;
always@(posedge clkin, negedge clr)
if(!clr) //异步清零:clear在低电平时Q为0
Q <= 4'd0;
else if(!load) //同步置数:若为低电平则直接赋值,数码管显示本时刻data值
Q <= data;
else if(en) //使能(en高电平)
begin
if(upd) //同步置数,加法计数(upd=1)
begin
if(Q == 4'd9)
Q <= 4'd0;
else
Q <= Q + 4'd1;
end
else //同步置数,减法计数(upd=0)
begin
if(Q == 4'd0)
Q <= 4'd9;
else
Q <= Q - 4'd1;
end
end
assign CO = (upd & (Q == 4'd9)) | (~upd & (Q == 4'd0) & clr); //(upd为高电平且Q为9)或者(upd为低电平且Q为0且clr不为0)
endmodule
RTL电路图
验收波形图
引脚分配表(EP4CE6E22C8)
标准参考: