module shixian60(sys_clk,
sys_rstn,
sm_seg,
sm_bit,
);
//输入、输出信号
input sys_clk;//全局时钟,50MHZ
input sys_rstn;//复位信号,低电平有效
output [7:0] sm_seg;//数码管段码
output [7:0] sm_bit;//数码管位码
//寄存器定义
reg [7:0] sm_seg;//数码管段码输出寄存器
reg [7:0] sm_bit;//数码管位码输出寄存器
reg [4:0] dataout_buf;//数据输出寄存器
reg [2:0] disp_dat;//显示数据寄存器
reg [35:0] delay_cnt;//延时寄存器
reg ge,shi;//
//------------------------设定扫描1KHZ------------
always@(posedge sys_clk or negedge sys_rstn)
begin
if(!sys_rstn)
delay_cnt<=16'd0;
else
begin
if(delay_cnt==36'd49_999_999_999)
delay_cnt<=16'd0;
else
delay_cnt<=delay_cnt+1'b1;
end
end
//--------------秒个位计时器计时------------------------
always@(posedge sys_clk or negedge sys_rstn)
begin
if(!sys_rstn)
begin
ge<=4'd0;
end
else
begin
if(delay_cnt==26'd49_999_999)
begin
if(ge==4'd10)
ge<=4'd0;
else
ge<=ge+1'b1;
end
end
end
//--------------秒十位计时器计时------------------------
always@(posedge sys_clk or negedge sys_rstn)
begin
if(!sys_rstn)
begin
shi<=4'd0;
end
else
begin
if(delay_cnt==36'd49_999_999_999)
begin
if(shi==4'd6)
shi<=4'd0;
else
shi<=shi+1'b1;
end
end
end
//------动态扫描位扫描中间变量----------------------
always@(posedge sys_clk or negedge sys_rstn)
begin
if(!sys_rstn)
disp_dat<=1'b0;
else
begin
if(delay_cnt==16'd49_999)
disp_dat<=disp_dat+1'b1;
else
disp_dat<=disp_dat;
end
end
//----------
always@(disp_dat)
begin
case(disp_dat)
1'b0:sm_bit=8'b1111_1110;
1'b1:sm_bit=8'b1111_1101;
default:sm_bit=8'b1111_1100;
endcase
end
//---------数码管动态显示位选-------------
always@(sm_bit)
begin
case(sm_bit)
8'b1111_1110:dataout_buf=ge;
8'b1111_1101:dataout_buf=shi;
default:dataout_buf=8;
endcase
end
//-----------------将十进制数转换成BCD七段码---------
always@(dataout_buf)
begin
case(dataout_buf)
4'h0:sm_seg=8'hc0;//'0'
4'h1:sm_seg=8'hf9;//'1'
4'h2:sm_seg=8'ha4;//'2'
4'h3:sm_seg=8'hb0;//'3'
4'h4:sm_seg=8'h99;//'4'
4'h5:sm_seg=8'h92;//'5'
4'h6:sm_seg=8'h82;//'6'
4'h7:sm_seg=8'hf8;//'7'
4'h8:sm_seg=8'h80;//'8'
4'h9:sm_seg=8'h90;//'9'
4'ha:sm_seg=8'h88;//'a'
4'hb:sm_seg=8'h83;//'b'
4'hc:sm_seg=8'hc6;//'c'
4'hd:sm_seg=8'ha1;//'d'
4'he:sm_seg=8'h86;//'e'
4'hf:sm_seg=8'h8e;//'f'
default:sm_seg=8'hc0;//'0'
endcase
end
endmodule
不知道错误在哪里,希望大神帮一下小弟
10楼
module shixian60(sys_clk,
sys_rstn,
sm_seg,
sm_bit,
);
//输入、输出信号
input sys_clk;//全局时钟,50MHZ
input sys_rstn;//复位信号,低电平有效
output [7:0] sm_seg;//数码管段码
output [7:0] sm_bit;//数码管位码
//寄存器定义
reg [7:0] sm_seg;//数码管段码输出寄存器
reg [7:0] sm_bit;//数码管位码输出寄存器
reg [4:0] dataout_buf;//数据输出寄存器
reg [1:0] disp_dat;//显示数据寄存器
reg [27:0] delay_cnt;//延时寄存器
reg [3:0] ge,shi;//
//------------------------设定扫描1KHZ------------
always@(posedge sys_clk or negedge sys_rstn)
begin
if(!sys_rstn)
delay_cnt<=28'd0;
else
begin
if(delay_cnt==28'd49_999)
delay_cnt<=28'd0;
else
delay_cnt<=delay_cnt+1'b1;
end
end
//--------------秒个位计时器计时------------------------
always@(posedge sys_clk or negedge sys_rstn)
begin
if(!sys_rstn)
begin
ge<=4'd0;
end
else
begin
if(delay_cnt==28'd49_999_999)
begin
if(ge==4'd10)
ge<=4'd0;
else
ge<=ge+1'b1;
end
end
end
//--------------秒十位计时器计时------------------------
always@(posedge sys_clk or negedge sys_rstn)
begin
if(!sys_rstn)
begin
shi<=4'd0;
end
else
begin
if(delay_cnt==28'd499_999_999)
begin
if(shi==4'd6)
shi<=4'd0;
else
shi<=shi+1'b1;
end
end
end
//------动态扫描位扫描中间变量----------------------
always@(posedge sys_clk or negedge sys_rstn)
begin
if(!sys_rstn)
disp_dat<=1'b0;
else
begin
if(delay_cnt==28'd49_999)
disp_dat<=disp_dat+1'b1;
else
disp_dat<=disp_dat;
end
end
//----------
always@(disp_dat)
begin
case(disp_dat)
1'b0:sm_bit=8'b1111_1110;
1'b1:sm_bit=8'b1111_1101;
default:sm_bit=8'b1111_1100;
endcase
end
//---------数码管动态显示位选-------------
always@(sm_bit)
begin
case(sm_bit)
8'b1111_1110:dataout_buf=ge;
8'b1111_1101:dataout_buf=shi;
default:dataout_buf=8;
endcase
end
//-----------------将十进制数转换成BCD七段码---------
always@(dataout_buf)
begin
case(dataout_buf)
4'h0:sm_seg=8'hc0;//'0'
4'h1:sm_seg=8'hf9;//'1'
4'h2:sm_seg=8'ha4;//'2'
4'h3:sm_seg=8'hb0;//'3'
4'h4:sm_seg=8'h99;//'4'
4'h5:sm_seg=8'h92;//'5'
4'h6:sm_seg=8'h82;//'6'
4'h7:sm_seg=8'hf8;//'7'
4'h8:sm_seg=8'h80;//'8'
4'h9:sm_seg=8'h90;//'9'
4'ha:sm_seg=8'h88;//'a'
4'hb:sm_seg=8'h83;//'b'
4'hc:sm_seg=8'hc6;//'c'
4'hd:sm_seg=8'ha1;//'d'
4'he:sm_seg=8'h86;//'e'
4'hf:sm_seg=8'h8e;//'f'
default:sm_seg=8'hc0;//'0'
endcase
end
endmodule
标记颜色的都是改过后的,我的思路是:个位每一秒记一次,十位是每十秒记一次,估计是always的使用方法不会用。好多细节的东西没有注意到
sys_rstn,
sm_seg,
sm_bit,
);
//输入、输出信号
input sys_clk;//全局时钟,50MHZ
input sys_rstn;//复位信号,低电平有效
output [7:0] sm_seg;//数码管段码
output [7:0] sm_bit;//数码管位码
//寄存器定义
reg [7:0] sm_seg;//数码管段码输出寄存器
reg [7:0] sm_bit;//数码管位码输出寄存器
reg [4:0] dataout_buf;//数据输出寄存器
reg [1:0] disp_dat;//显示数据寄存器
reg [27:0] delay_cnt;//延时寄存器
reg [3:0] ge,shi;//
//------------------------设定扫描1KHZ------------
always@(posedge sys_clk or negedge sys_rstn)
begin
if(!sys_rstn)
delay_cnt<=28'd0;
else
begin
if(delay_cnt==28'd49_999)
delay_cnt<=28'd0;
else
delay_cnt<=delay_cnt+1'b1;
end
end
//--------------秒个位计时器计时------------------------
always@(posedge sys_clk or negedge sys_rstn)
begin
if(!sys_rstn)
begin
ge<=4'd0;
end
else
begin
if(delay_cnt==28'd49_999_999)
begin
if(ge==4'd10)
ge<=4'd0;
else
ge<=ge+1'b1;
end
end
end
//--------------秒十位计时器计时------------------------
always@(posedge sys_clk or negedge sys_rstn)
begin
if(!sys_rstn)
begin
shi<=4'd0;
end
else
begin
if(delay_cnt==28'd499_999_999)
begin
if(shi==4'd6)
shi<=4'd0;
else
shi<=shi+1'b1;
end
end
end
//------动态扫描位扫描中间变量----------------------
always@(posedge sys_clk or negedge sys_rstn)
begin
if(!sys_rstn)
disp_dat<=1'b0;
else
begin
if(delay_cnt==28'd49_999)
disp_dat<=disp_dat+1'b1;
else
disp_dat<=disp_dat;
end
end
//----------
always@(disp_dat)
begin
case(disp_dat)
1'b0:sm_bit=8'b1111_1110;
1'b1:sm_bit=8'b1111_1101;
default:sm_bit=8'b1111_1100;
endcase
end
//---------数码管动态显示位选-------------
always@(sm_bit)
begin
case(sm_bit)
8'b1111_1110:dataout_buf=ge;
8'b1111_1101:dataout_buf=shi;
default:dataout_buf=8;
endcase
end
//-----------------将十进制数转换成BCD七段码---------
always@(dataout_buf)
begin
case(dataout_buf)
4'h0:sm_seg=8'hc0;//'0'
4'h1:sm_seg=8'hf9;//'1'
4'h2:sm_seg=8'ha4;//'2'
4'h3:sm_seg=8'hb0;//'3'
4'h4:sm_seg=8'h99;//'4'
4'h5:sm_seg=8'h92;//'5'
4'h6:sm_seg=8'h82;//'6'
4'h7:sm_seg=8'hf8;//'7'
4'h8:sm_seg=8'h80;//'8'
4'h9:sm_seg=8'h90;//'9'
4'ha:sm_seg=8'h88;//'a'
4'hb:sm_seg=8'h83;//'b'
4'hc:sm_seg=8'hc6;//'c'
4'hd:sm_seg=8'ha1;//'d'
4'he:sm_seg=8'h86;//'e'
4'hf:sm_seg=8'h8e;//'f'
default:sm_seg=8'hc0;//'0'
endcase
end
endmodule
标记颜色的都是改过后的,我的思路是:个位每一秒记一次,十位是每十秒记一次,估计是always的使用方法不会用。好多细节的东西没有注意到
回复
| 有奖活动 | |
|---|---|
| 这个春节你犒赏自己什么了?分享你的故事,有奖征集 | |
| 2026年“我要开发板活动”第三季,开始了! | |
| 硬核工程师专属补给计划——填盲盒 | |
| “我踩过的那些坑”主题活动——第002期 | |
| 【EEPW电子工程师创研计划】技术变现通道已开启~ | |
| 发原创文章 【每月瓜分千元赏金 凭实力攒钱买好礼~】 | |
| 【EEPW在线】E起听工程师的声音! | |
| 高校联络员开始招募啦!有惊喜!! | |
我要赚赏金打赏帖 |
|
|---|---|
| Gravity:中英文语音合成模块V2.0及其串口控制被打赏¥24元 | |
| 全彩色度变化图的绘制被打赏¥27元 | |
| 【FreeRtos】FreeRtos任务栈的生长方向管理方式被打赏¥20元 | |
| 【瑞萨RA8D1 LVGL/LWIP评测】LVGL添加输入设备:EC11旋转编码器被打赏¥39元 | |
| 【瑞萨RA8D1 LVGL/LWIP评测】RA8D1部署FreeRTOS+LVGL被打赏¥33元 | |
| 空气质量检测器设计与实现被打赏¥24元 | |
| 【瑞萨RA8D1 LVGL/LWIP评测】LWIP进行UDP、TCP、HTTP、MQTT功能联合测试被打赏¥41元 | |
| 【瑞萨RA8D1 LVGL/LWIP评测】RA8D1部署FreeRTOS+LWIP被打赏¥36元 | |
| RTOS怎么选?让我来给你答案!被打赏¥15元 | |
| 【S32K3XX】Flash驱动使用被打赏¥26元 | |
我要赚赏金
