作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要通过双向数据总线 (ULPI) 与芯片通信。
据我所知,数据在时钟上升沿从 ULPI 总线移出,并在时钟下降沿读取。我的问题是,在读取寄存器时,我首先需要对上升沿敏感(将命令写入数据总线上的芯片),然后在从芯片读取寄存器输出到总线时对下降沿敏感。
我不清楚如何设计这个最好的方式。
我尝试了一个带有 case 语句的进程,但要使其正常工作,我的进程需要对上升沿和下降沿都敏感,我认为这不好。还是真的没问题?
最佳答案
双向总线通常通过使用三态缓冲器来实现。当三态缓冲区输出为“Z”时,您可以从 inout
中读取端口,当缓冲器驱动线路时,它充当输出。在 VHDL 中,这可以通过直接实例化一个原语(例如 Xilinx 器件的 IOBUF
)或通过让您的综合工具通过描述上述逻辑来推断三态缓冲区来实现。
您在这里处理 3 个信号:
T
这是你的三态控制。该信号将来自您的同步逻辑,了解 ULPI 的协议(protocol)。那是因为总线是共享的,所以必须有某种方法可以知道何时应该接收数据和发送数据。 I
这是您希望通过总线发送的输入数据,在被适当的时钟注册后。 O
这是您在任何注册/同步之前通过总线接收的输出数据。 library ieee;
use ieee.std_logic_1164.all;
library unisim; -- for xilinx IOBUF
use unisim.vcomponents.all;
entity iobuffer_example is
port (
I_CLK : in std_logic; -- synchronized with bidir bus
IO_DATA : inout std_logic; -- data to/from external pin on bidir bus
I_DIR_CTRL : in std_logic; -- from other VHDL logic, controlling bidir bus direction
O_DATA_FROM_EXTERNAL : out std_logic; -- data received over bidir bus
I_DATA_TO_EXTERNAL : in std_logic); -- data to send over bidir bus
end entity iobuffer_example;
architecture io_buffer_arch of iobuffer_example is
signal data_in : std_logic;
signal data_out : std_logic;
begin
IOBUF_Inst : IOBUF
port map (
O => data_in, -- data from bidir bus
IO => IO_DATA, -- data on bidir bus
I => data_out, -- data to bidir bus
T => I_DIR_CTRL); -- 3-state enable input, high=input, low=output
Register_Input : process (I_CLK) is
begin
if (falling_edge(I_CLK)) then
O_DATA_FROM_EXTERNAL <= data_in;
end if;
end process Register_Input;
Register_Output : process (I_CLK) is
begin
if (rising_edge(I_CLK)) then
data_out <= I_DATA_TO_EXTERNAL;
end if;
end process Register_Output;
end architecture io_buffer_arch;
IOBUF
:
PROCESS (I_DIR_CTRL, IO_DATA)
BEGIN
IF( I_DIR_CTRL = '1') THEN
IO_DATA <= 'Z';
ELSE
IO_DATA <= data_out;
END IF;
data_in <= IO_DATA;
END PROCESS;
关于vhdl - 双向数据总线设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11969826/
我正在为一项新业务设计一个系统,并且处于一个独特的“全权委托(delegate)”位置。 与所有企业一样,它计划持续很长时间并发展到不确定的规模。 是否值得全力以赴开发一个具有显式数据和服务总线的完整
我是一名优秀的程序员,十分优秀!