怎么做填表网站,建设公司网站的会计分录,个人cms网站,关于推动门户网站建设d提示#xff1a;文章写完后#xff0c;目录可以自动生成#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、数字时钟是什么#xff1f;二、EDA里面数码管的显示1.元件模型2.参考程序3. 实验仿真波形4.实验现象5. 仿真问题 三、显示时钟1. 时钟电路模块2.参考程序3… 提示文章写完后目录可以自动生成如何生成可参考右边的帮助文档 文章目录 前言一、数字时钟是什么二、EDA里面数码管的显示1.元件模型2.参考程序3. 实验仿真波形4.实验现象5. 仿真问题 三、显示时钟1. 时钟电路模块2.参考程序3.仿真波形4.实验效果 总结 前言
提示这里可以添加本文要记录的大概内容
前面学习了基本的数字芯片逻辑编程学会了计数器等这次来一个做一个综合应用。数字时钟采用数码管显示时分秒。 提示以下是本篇文章正文内容下面案例可供参考
一、数字时钟是什么
数字时钟是一种以数字显示取代模拟表盘的钟表它能够以数字的形式显示当前的时间并且可以同时显示时、分、秒。此外它通常具有对时、分、秒进行准确校准的功能。 示例能用数码管显示 时分秒的时钟
二、EDA里面数码管的显示
目标动态数码管显示 12345678 时间显示的状态效”12.20.30 12-20.30 12-20-30
1.元件模型
代码如下示例 2.参考程序
代码如下示例
module seg(clk,seg7,ledcom);
input clk; // 假设系统提供的时钟 50Mhz
output[7:0] seg7; //段
output[7:0] ledcom; //位选
reg[7:0] seg7; //alway 里面赋值要用reg数据
reg[20:0] cnt;
reg[7:0] ledcom;
always(posedge clk)
begin if(cnt21b1 1111 1111 1111 1111 1111) // 2的22减一cnt0; else cntcnt1;
end
always(cnt) //给位选
begin case(cnt[16:14]) // 14 15 16 000 -111 前面13为 满进位3b000:ledcom8b00000001;//0 只有一个位选为1 只有第一位数码管选中并显示3b001:ledcom8b00000010;//1 3b010:ledcom8b00000100;//2 3b011:ledcom8b00001000;//3 3b100:ledcom8b00010000;//0 3b101:ledcom8b00100000;//1 3b110:ledcom8b01000000;//2 3b111:ledcom8b10000000;//3 endcase
end
always(cnt) //段码
begin case(cnt[16:14]) 3b000:seg78b00000111;//0 同时给到段码 保证只有 第一个数码管亮 3b001:seg78b11011011;//1 3b010:seg78b11001111;//23b011:seg78b10100111;//3 3b100:seg78b11101101;//0 3b101:seg78b11111101;//1 3b110:seg78b01000111;//2 3b111:seg78b11111111;//3 endcase
end
endmodule为了仿真改小了参数
module seg(clk,seg7,ledcom,cnt,en);
input en;
input clk; // 假设系统提供的时钟 50Mhz
output[7:0] seg7; //段
output[7:0] ledcom; //位选
reg[7:0] seg7; //alway 里面赋值要用reg数据
output reg[8:0] cnt;
reg[7:0] ledcom;
always(posedge clk)
begin if(!en)cnt0;elseif(cnt8b111111111) // 2的22减一cnt0; else cntcnt1;
end
always(cnt) //给位选
begin case(cnt[7:5]) // 14 15 16 000 -111 前面13为 满进位3b000:ledcom8b00000001;//0 只有一个位选为1 只有第一位数码管选中并显示3b001:ledcom8b00000010;//1 3b010:ledcom8b00000100;//2 3b011:ledcom8b00001000;//3 3b100:ledcom8b00010000;//0 3b101:ledcom8b00100000;//1 3b110:ledcom8b01000000;//2 3b111:ledcom8b10000000;//3 default:ledcom8b10000000;endcase
end
always(cnt) //段码
begin case(cnt[7:5]) 3b000:seg78b00000111;//0 同时给到段码 保证只有 第一个数码管亮 3b001:seg78b11011011;//1 3b010:seg78b11001111;//23b011:seg78b10100111;//3 3b100:seg78b11101101;//0 3b101:seg78b11111101;//1 3b110:seg78b01000111;//2 3b111:seg78b11111111;//3 default:seg78b11111111;endcase
end
endmodule
测试文件 timescale 1 ps/ 1 ps
module seg_tb3();
// constants
// general purpose registers
reg eachvec;
// test vector input registers
reg clk;
reg en;
// wires
wire [8:0] cnt;
wire [7:0] ledcom;
wire [7:0] seg7;// assign statements (if any)
seg i1 (
// port map - connection between master ports and signals/registers .clk(clk),.cnt(cnt),.en(en),.ledcom(ledcom),.seg7(seg7)
);
initial
begin
// code that executes only once
// insert code here -- begin // -- end
#10 clk 0;
#100 en0;
#10 en1;
$display(Running testbench);
end always #10 clk~clk;
always
// optional sensitivity list
// (event1 or event2 or .... eventn)
begin
// code executes for every event on sensitivity list
// insert code here -- begin eachvec;
// -- end
end
endmodule
实际仿真测试元件图 3. 实验仿真波形 4.实验现象
5. 仿真问题 三、显示时钟
1. 时钟电路模块 2.参考程序
module watch(clk,reset,seg_r,dig_r);
input clk;
input reset;
output[7:0] seg_r;
output[7:0] dig_r;
reg[25:0] count;
reg[15:0] hour;
reg sec;
reg[4:0] disp_dat;
reg[7:0] seg_r;
reg[7:0] dig_r;
always (posedge clk)
begin count count 1b1; if(count 26d25000000)begin count 26d0; sec ~sec; end
end
always (posedge sec)
begin
if(reset0) hour[15:0]0; else begin hour[3:0] hour[3:0]1b1; if(hour[3:0] 4ha) begin hour[3:0] 4h0; hour[7:4] hour[7:4]1b1; if(hour[7:4] 4h6) begin hour[7:4] 4h0; hour[11:8] hour[11:8] 1b1; if(hour[11:8] 4ha) begin hour[11:8] 4h0; hour[15:12] hour[15:12] 1b1; if(hour[15:12] 4h6) hour[15:12] 4h0; end end end endend
always (posedge clk)
begin case(count[17:15]) 3d0:disp_dat hour[3:0]; 3d1:disp_dat hour[7:4]; 3d3:disp_dat hour[11:8]; 3d4:disp_dat hour[15:12]; endcase case(count[17:15]) 3d0:dig_r 8b10000000; 3d1:dig_r 8b01000000; 3d2:dig_r 8b00000000; 3d3:dig_r 8b00010000; 3d4:dig_r 8b00001000; 3d5:dig_r 8b00000000; 3d6:dig_r 8b00000000; 3d7:dig_r 8b00000000; endcase
end
always (posedge clk)
begin case(disp_dat)
0:seg_r8b01111111; 1:seg_r8b00000111; 2:seg_r8b11011011; 3:seg_r8b11001111; 4:seg_r8b10100111; 5:seg_r8b11101101;6:seg_r8b11111101; 7:seg_r8b01000111; 8:seg_r8b11111111; 9:seg_r8b11101111;
default:seg_r 8hff; endcase
end
endmodule3.仿真波形
4.实验效果
总结
提示这里对文章进行总结