always @(posedge clk or negedge rst_n)begin if(!rst_n)begin ... end 关键在于理解if()的意义:如果()里逻辑值为1,则怎么怎么样。 所以如果写成if(rstn)意思就是:如果rst_n为逻辑1则进行复位。因此为了满足低电平才复位的要求,要在rst_n前加个!号(!号表示对信号电平取反),也就是if(!rst_n),...
if(!rst_n)//rst_n为0时满足条件,进入执行语句 q <=0;//q赋值0,用";"隔开 else q <=1;//q赋值1,用";"隔开 因为分号是Verilog语法不可缺少的部分,是if内嵌语句所要求的。如果没有分号,将报语法错误。 在if和else后可以内嵌操作语句,比如,begin end,里面可以同时执行多条语句。例: if(s ==2'b...
初学者在学习 Verilog 语言时可能会对代码中的某些部分感到困惑,比如 `if(!rst_n)` 的作用。这一句的关键在于理解 if() 的逻辑。if() 语句的作用是,当其内部逻辑表达式为真时,执行接下来的代码块。以 `if(rst_n)` 为例,这意味着如果 `rst_n` 为逻辑 1,则执行接下来的代码。然而,为...
inputrst_n,//输入复位 inputclk,//输入时钟 outputclk_div//分频时钟 ); parameterDIV_NUM =6;//分频参数 reg[15:0] clk_cnt; regclk_out; always@(posedgeclkornegedgerst_n) begin if(!rst_n) begin clk_cnt <='b0; end elseif(clk_cnt == ((DIV_NUM/2) -1)) begin clk_cnt <='b0;...
if(rst_n == 1'b0) begin key_touch_dly1 <= 1'b0; key_touch_dly2 <= 1'b0; end else begin key_touch_dly1 <= key_touch; key_touch_dly2 <= key_touch_dly1; end end /// //⑤assign /// assign touch_en = key_touch_dly2 & (~key_touch_dly1); ///...
if (~rst_n) flag <= 1'd0; else case (flag) 1'd0: if (adc_data == 8'd9) // -1 flag <= 1'd1; else flag <= 1'd0; 1'd1: if (adc_data == 8'd1) // +1 flag <= 1'd0; else flag <= 1'd1; default: flag <= flag; ...
if(!rst_n)begin q<=1'b0; end elsebegin q<=a&b;//即便有组合逻辑,也不要写成:q = a & b end end 4)在同一个 always 块中不要既使用阻塞赋值又使用非阻塞赋值 always 涉及的组合逻辑中,既有阻塞赋值又有非阻塞赋值时,会导致意外的结果,例如下面代码描述。
assign cs_n = cs_n_r; always @ (posedge clk_40k or negedge rst_n) begin if(~rst_n) cs_n_r <= 1'b1; else if(send_start) cs_n_r <= 1'b0; else if(data_out_vld_r) cs_n_r <= 1'b1; end //clk_cnt always @ (posedge clk_40k or negedge rst_n) ...
if(!rst_n) count_sys<='d0; else if(count_carr==NC_NUMBER-1) count_sys<=count_sys+1'b1; else if(!data_in_valid) count_sys<='d0; else count_sys<=count_sys; //子载波计数期间一直保存符号数的计数值 end ///读出数据 always@(posedge sys_clk or negedge rst_n) begin ...
if(!rst_n)begin sig_slow <= 0; end else begin sig_slow <= sig_fast; end end always@(posedge clk_slow or negedge rst_n)begin // 慢时钟下保持 if(!rst_n)begin sig_slow_r <= 2'b0; end else begin sig_slow_r <= {sig_slow_r[0],sig_slow}; ...