FPGA学习日记(7) 阻塞赋值与非阻塞赋值

补发 

阻塞赋值  =

非阻塞赋值 <= 只能用于寄存器类型变量进行赋值

module blocking

module blocking
(    
    input  wire sys_clk,
    input  wire sys_rst,
    input  wire [1:0] in,
    output reg [1:0] out
);

reg [1:0] in_reg;  //方便在波形上观察延迟一拍效果

always@(posedge sys_clk or negedge sys_rst)
    if(sys_rst == 1'b0)
        begin
            in_reg=1'b0;
            out=1'b0;
    else
        begin
            in_reg = in;
            out =in_reg;

endmodule

tb_blocking

`timescale 1ns/1ns
module tb_blcoking();

reg sys_clk;
reg sys_rst;
reg in;
wire out;

initial 
    begin
        sys_clk <= 1'b1;
        sys_rst <= 1'b0;
        #10
        sys_rst <= 1'b1;
        #210
        sys_rst <= 1'b0;
        #40
        sys_rst <= 1'b1;
    end

always #10 sys_clk <= ~sys_clk;
always #10 on <= {$random}%4;

blockong blocking_inst   
(
    .sys_clk(sys_clk),
    .sys_rst(sys_rst),
    .in(in),
    .out(out)
);
endmodule     

RTL视图

out与in一个寄存器 延迟一拍

 

 非阻塞赋值

module blocking
(    
    input  wire sys_clk,
    input  wire sys_rst,
    input  wire [1:0] in,
    output reg [1:0] out
);

reg [1:0] in_reg;  //方便在波形上观察延迟一拍效果

always@(posedge sys_clk or negedge sys_rst)
    if(sys_rst == 1'b0)
        begin
            in_reg=1'b0;
            out=1'b0;
    else
        begin
            in_reg <= in;
            out <=in_reg;

endmodule

RTL视图

out延迟in两拍,非阻塞赋值,in_reg延迟in一拍,out延迟in_reg一拍

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值