在学verilog 的时候遇到的问题.希望大神能解决
就是实现对25m的时钟分频来实现8个灯表示的递增进位..
有两个问题.1,是我想着分频后不是可以直接用分频后的信号做led 的时钟信号不就好了.但是改了发现跟原来比对应的第0盏灯不亮.......
2,然后我自己编了test bench...发现len_h完全没有波形........
********************************顶层*****************
module led_top(input clk,
input rst_n,
output [7:0]led_h);
wire clk_led;
clk_design clk_design_inst(.clk(clk),
.rst_n(rst_n),
.clk_led(clk_led));
led led_inst(.clk_led(clk_led),
// .clk(clk),
.rst_n(rst_n),
.led_h(led_h));
endmodule
**********************************时钟分频******************
module clk_design(input clk, //时钟的输入
input rst_n, // 复位
output clk_led); //led 的控制信号 .
reg[24:0] cnt;
parameter LED_CNT = 24_999_999;
always@(posedge clk or negedge rst_n)
begin
if(!rst_n)
cnt <= 25'd0 ;
else if (cnt < LED_CNT )
cnt <= cnt + 1'b1 ;
else cnt <= 25'd0 ;
end
assign clk_led = (cnt == 25'd24_999_999)? 1'b1 : 1'b0;
endmodule
*********************************led*****************
module led(input clk_led,
input rst_n,
// input clk,
output reg[7:0] led_h);
always@(posedge clk_led or negedge rst_n)
begin
if(!rst_n)
led_h <= 8'd0;
else if (clk_led )
led_h <= led_h + 1'b1;
else
led_h <= led_h;
end
endmodule
*************************测试程序************************
`timescale 1 ns/ 1 ps
module led_top_vlg_tst();
reg clk;
reg rst_n;
wire [7:0] led_h;
initial
begin
$monitor($time,"led_h value = %b\n",led_h);
clk = 0 ;
rst_n = 0 ;
#100;
@(posedge clk);
rst_n = 1 ;
end
always
#20 clk = ~clk ;
led_top i1 (
.clk(clk),
.led_h(led_h),
.rst_n(rst_n));
endmodule