FPGA设计中inout端口信号的仿真测试

inout端口作为输入输出口,其在综合中以三态门的硬件形式而存在。但在波形仿真中,其具有输入输出性质就需要特别的操作手法才可以观察到正确的仿真波形。

  1. 在inout端口信号的仿真中,测试激励文件中Inout口必须定义为wire类型;
  2. 建议inout口的输入仿真和输出仿真分开来做,尤其是在IIC等互有交互变换时,因为这样会增加仿真激励文件的书写难度;
  3. 在进行inout口输入仿真时,把该端口在测试激励文件中视为单纯的wire类型,尽管你可能会在仿真波形中看到被测试模块输出的高阻信号;
  4. 在进行inout口的输出仿真时,需要在测试激励文件中定义一个三态门和该端口相连,这样才可以在仿真中看到该端口的正确输入波形信号。

下面,以Inout口的输入为特别示例(IIC主机读从机),其中sda为inout口:

module iic_tb(

    );
    reg clk,rst_n;
    wire sda;
    reg[7:0]data_in;
    reg data_v;
    wire scl;
    wire[7:0]data_rd;
    wire wr,rd;
    /
    //建立输入仿真三态门
    reg SDA_R;
    reg SDA_LINK;
    wire SDA;
    assign SDA = SDA_LINK ? 1'bz : SDA_R;
    assign sda = SDA;
    /
    IIC IIC_U1(
         .clk(clk),
         .rst_n(rst_n),
         .sda(sda),
        .data_in(data_in),
        .data_v(data_v),
         .scl(scl),
        .data_rd(data_rd),
         .wr(wr),
         .rd(rd)
        );
initial begin
clk <= 0;
rst_n = 1;
data_in <= 8'd0;
data_v <= 0;
SDA_R <= 0;
SDA_LINK <= 1;
#100 rst_n = 0;
#100 rst_n = 1;
/
#20 begin
       data_in <= 8'b11110001;
       data_v <= 1'b1; 
    end
#20 data_v <= 1'b0;
#87440 SDA_LINK = 1'b0;
#7500   begin
    SDA_R = 1'b1;
 end
 #10000 SDA_R = 1'b0;
 #10000 SDA_R = 1'b1;
 #10000 SDA_R = 1'b0;
 #10000 SDA_R = 1'b1;
 #10000 SDA_R = 1'b0;
 #10000 SDA_R = 1'b1;
 #10000 SDA_R = 1'b0;
 #10000 SDA_LINK = 1'b1;

end
always #10 clk = ~clk;
endmodule

测试出的波形如下:

可以看到在被测试模块sda输出高阻的情况下(link = 1),观察到了sda输入的正确波形

  • 5
    点赞
  • 67
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值