

1. 用verilog设计一个模块,模块名称为clock_gen,模块输入为(input sys_clk, input sys_rst_n),模块输出为(output reg pulse_1ms, output reg pulse_1s)。
其中,sys_clk为时钟信号,时钟频率为62.5MHz;sys_rst_n为复位信号,低电平复位;pulse_1ms为每1ms为周期的高电平信号,持续一个时钟周期;pulse_1s为每秒为周期的高电平信号,持续一个时钟周期。
请写出以上模块的verilog代码,注意保持语法规范。
解析:主要考察基本的verilog 的设计能力。
写出模块框架,给出两个计数器,在对应位置给出输出即可。
moduleclock_gen (
input wire sys_clk,
input wire sys_rst_n,
output reg pulse_1ms,
output reg pulse_1s
);
parameter T_1ms = 62_500;
parameter T_1s = 62_500_000;
reg [15:0] cnt_1ms;
reg [25:0] cnt_1s;
always @ (posedge sys_clk) begin
if (sys_rst_n == 1'b0)
cnt_1ms <= 16'd0;
else
if (cnt_1ms < T_1ms - 1'b1)
cnt_1ms <= cnt_1ms + 1'b1;
else
cnt_1ms <= 16'd0;
end
always @ (posedge sys_clk) begin
if (sys_rst_n == 1'b0)
pulse_1ms <= 1'b0;
else
if (cnt_1ms == T_1ms - 1'b1)
pulse_1ms <= 1'b1;
else
pulse_1ms <= 1'b0;
end
always @ (posedge sys_clk) begin
if (sys_rst_n == 1'b0)
cnt_1s <= 26'd0;
else
if (cnt_1s < T_1s - 1'b1)
cnt_1s <= cnt_1s + 1'b1;
else
cnt_1s <= 26'd0;
end
always @ (posedge sys_clk) begin
if (sys_rst_n == 1'b0)
pulse_1s <= 1'b0;
else
if (cnt_1s == T_1s - 1'b1)
pulse_1s <= 1'b1;
else
pulse_1s <= 1'b0;
end
endmodule