十六进制计数器
couter.v
十六进制计数器模块
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| module counter ( input clk, input rst, output reg[3:0] data );
initial begin data = 4'b0000; end
always @(posedge clk) begin if (rst == 1'b1) begin data = 4'b0000; end else begin data = data + 1; end end
endmodule
|
clkdiv
分频模块
数位板的脉冲为100whz
如果不分频,频率太高了,输出的灯会一直亮着
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| module clkdiv ( input clk_in, output reg clk_out ); reg [24:0] data = 25'b0;
initial begin clk_out = 0; end
always @(posedge clk_in) begin data = data + 1; if (data == 25'b0) begin clk_out = ~clk_out; end end
endmodule
|
testbench.v
测试模块
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| module testbench ( );
reg clk; reg rst; wire [3:0] data; reg clk_div;
initial begin $dumpfile("wave.vcd"); $dumpvars(0, testbench); end
initial begin rst = 1'b1; clk = 1'b0; #100000 $finish; end
always #1 begin clk = ~clk; end
clkdiv clkdiv(.clk_in(clk), .clk_out(clk_out)); counter counter(.clk(clk), .rst(rst), .data(data));
endmodule
|