问题代码似乎是 /*---*/ 包围的地方,有三种方案,看注释,不知没有有人能帮我解释一下?
module ClockDivision(
input clk
, input rst_n_d /* 异步清零 */
, input[CLK_DIV_BIT_WIDTH:1] div_factor
, output out_pulse /* 输出时钟脉冲 */
);
parameter CLK_DIV_BIT_WIDTH = 32; // the bit-width of the counter
wire counter_rst_n;
wire [CLK_DIV_BIT_WIDTH:1]count;
Counter #(CLK_DIV_BIT_WIDTH) ClockDivision_Counter(
.clk (clk)
, .rst_n_d (counter_rst_n)
, .count (count)
);
reg out_pulse_r; /* 输出脉冲寄存器 */
always@ (posedge clk) begin
/* 当上升沿之前计数到 div_factor-1'b1,就可以输出脉冲了 */
out_pulse_r <= ( (count+1'b1) == div_factor)?1'b1:1'b0 ;
end
/* 当计数到设定的值的时候,使能异步复位,直接清零 */
assign counter_rst_n = (!rst_n_d)?1'b0
(count == div_factor)?1'b0:1'b1 );
/*---------------------------------------------------------------*/
/* 为什么这个会有问题呢,我想在时钟下降沿清零啊!!!为什么呢?为什么呢? */
//assign out_pulse = clk?out_pulse_r:1'b0;
/* 如果分频系数为 1,直接输出时钟,这种方式是可行的 */
wire sel = div_factor==1?1'b1:1'b0;
assign out_pulse = sel?clk
ut_pulse_r;
/* 这种方式在分频系数为 1 的时候输出是不会跳的 */
//assign out_pulse = out_pulse_r;
/*---------------------------------------------------------------*/
endmodule