Vivado 摸鱼记录 Day_3 ╮( ̄▽ ̄)╭
1. review
已经学习过组合逻辑电路 译码器Vivado 3-8译码器 4-16译码器-CSDN博客
以及Vivado使用流程Vivado 使用流程 二选一数据选择器-CSDN博客
2. 时序逻辑计数器
2.1 分析
时序逻辑对比组合逻辑,增加了clk,即时钟信号。
以led每500ms亮灭为例,学习时序逻辑语法。
2.2 design sources
module led_500ms(input clk , input reset_n , output reg led); / /led每秒交替闪烁500ms //使用D触发器4位 //50MHz 20ns 500ms/20ns = 25000000 25个4位D触发器 reg [24:0] counter ; always@(posedge clk or negedge reset_n) //计数counter if(!reset_n) counter <= 0; else if(counter == 25000000-1) counter <= 0; else counter <= counter + 1'd1;
always@(posedge clk or negedge reset_n)//led if(!reset_n) led <= 0; else if(counter == 25000000-1) led <= !led; //else led <= led; endmodule |
always 是并行的 所以可以分开写 分开写方便修改 counter / led reg 在always@块中,被赋值对象类型为reg posedge 上升沿 negedge 下降沿 //else led <= led; 对于时序逻辑无else默认保持 组合逻辑不可无else |
25000000-1 对于计数器:0-1 1-2 2-3 3-0 0-3是四位计数器 故需要减一 //此处可用 parameter 后续摸鱼记录会写滴 |
2.3 simulation sources
`timescale 1ns / 1ns module led_500ms_tb(); reg clk , reset_n ; wire led ; led_500ms led_500ms2( .clk(clk) , .reset_n(reset_n) , .led(led) );
initial clk = 1 ;//初始化时钟高电平 always #10 clk = ~clk ; //50MHz 10ns翻转一次 initial begin reset_n = 0 ; #201 ; reset_n = 1 ; #2000000000; $stop; end
endmodule |
initial clk = 1 ;//初始化时钟高电平 always #10 clk = ~clk ; //50MHz 10ns翻转一次 //初始化时钟 led_500ms led_500ms2( ... ); //一定要记得写红色的名字鸭!! //布吉岛是谁每次只记得改完括号参数就报错T_T |
2.4 simulation
2.4.1 counter == 25000000
2.4.2 counter == 25000000 -1
所以计数器这里要注意-1
//对于parameter 下次摸鱼再写╮( ̄▽ ̄)╭