微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 关于Verilog中的inout数据类型,求助啊

关于Verilog中的inout数据类型,求助啊

时间:10-02 整理:3721RD 点击:
inout数据类型的赋值总是不对。
比如rom_data[7:0],mode[1:0]都为输入信号,IO[7:0]为inout信号,
always@ (posedge clk)
begin
if(!reset)
    begin
   无关紧要的东西
    end
else
    begin
    case(mode)
    2'b00 :
      IO[7:0]<=rom_data[7:0];
      ......
    endcase
    end
end
怎么仿真的时候IO赋值根本就不是rom_data的值啊,是怎么回事啊,难道inout还有别的什么赋值方式?

先把rom_data[7:0] 赋给一个reg型变量,如IO_reg[7:0]
然后assign IO = IO_reg;

试试啊,看看行不行 2# fslrayman

如果这样的话,我后面还有别的时刻还有读取IO的内容啊,这样还能够读吗?
比如ram_data[7:0]<=IO[7:0];
你那样的话就是把IO当成输出了吧,没有考虑到IO的输入功能吧

111111111111111111

IO口是双向口,需要一个方向选通信号oEN
一般是
assign port_io = oEN ? 1'bz : port_o;
assign port_i = port_io;
所以你还应该有选通信号的register

楼上正解

我觉得对于HDL语言设计时一定要先明白它综合后对应的硬件逻辑电路。对于inout型,并不要简单理解为一种数据类型,综合后它要对应一个硬件电路。因此“小富人”同学的HDL描述有道理。只有再加上门控信号,才能实现inout功能 呵呵

试试 buffer 类型?

搞清楚为什么要用IO。

恩,谢谢,已经搞定。真的是这样的,怎么以前看书的时候没看到过这样的玩意啊,呵呵

恩,要对应硬件来理解,谢谢了

同意小富人的看法

最好还是别设置buffer,
双向inout信号关键是要有选通信号,在输出时,将其值设为高阻态。

小富人的解释很好啊

上一篇:ise 13.3 license
下一篇:FPGA资源问题

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top