Design【Vivado_8位流水灯】代码中的计数器设置是因为我的开发板的时钟是100MHZ的,也就是1秒完成了100_000_000次时钟信号,所以我设置计数器为100_000_000次 。
也就是说,我让流水灯的变化周期为1 s 。
counter == 32'd100_000_000
文章插图
代码
`timescale 1ns / 1psmodule flow_led(clk,reset,led);input clk;input reset;output [7:0] led;reg [7:0] led;reg [31:0] counter;reg [1:0] state; always @(posedge clk or negedge reset)beginif(!reset)begincounter <= 32'd0;endelse if ( counter == 32'd100_000_000) //change Tbegincounter <= 32'd0;endelsebegincounter <= counter + 32'd1;endendalways @(posedge clk or negedge reset)beginif(!reset)beginstate <= 8'd0;endelse if( counter == 32'd0 )beginstate <= 1'd1;endelsebeginstate <= 1'd0;endendalways @(posedge clk or negedge reset)beginif(!reset)beginled <= 8'b1111_1111;endelsebeginif(state == 1'd1)beginif(led == 8'b1111_1111)beginled <= 8'b0000_0001;endelse if(led == 8'b1000_0000)beginled <= 8'b0000_0001;endelsebeginled <= led << 1'b1;endendendendendmodule
Simulation若在波形仿真中,我们想让与模拟的时钟信号也是100MHZ,让流水灯的周期也为1s , 那样的话仿真是跑不完的 。所以我们先修改刚刚的计数周期:
counter == 32'd1_000_000
仿真中让时钟周期为1000 ns
parameter T=1000;
这样就可以很轻松的看到流水灯全周期的波形图了 。
代码
`timescale 1ns/1nsmodule sim_dev1();parameter T=1000;reg clk;reg reset;wire [7:0] led;initialbeginclk=1'b0;reset=1'b0;#(T+1) reset=1'b1;endalways #(T/2) clk=~clk;flow_led u1(.clk(clk),.reset(reset),.led(led));endmodule
波形图文章插图
参考资料
- FPGA_VIVADO_verilog_八个流水灯_1
- vivado 对高阻z和不定态x信号的处理
- vivado波形仿真中运行时间的设置以及时长的测量方法
推荐阅读
- 宝宝耳朵发炎了往外流水怎么办呢
- 京东金融流水账单怎么打印
- 京东白条还不上提供什么样的银行流水
- 京东钱包贷款平台显示流水不足需要存3万才能提现是真的吗?
- 网上贷款需要银行卡的流水号吗?
- 京东金融二次分期提供银行流水多了好嘛?
- 无边界音乐《敌意》歌词
- 8位割双眼皮的男星 一般做双眼皮多少钱
- 草莓怎么样洗才干净能吃 草莓怎么样洗才干净
- 电信pin码初始密码是多少 电信puk原始密码8位数