【问题标题】:VHDL - Usage of high impedanceVHDL - 高阻抗的使用
【发布时间】:2019-11-22 19:14:41
【问题描述】:

我开始学习 VHDL,并且我目前正在遵循一本书的说明,该说明建议使用带缓冲器的 4 到 8 多路复用器。所以我决定构建一个 4x1 MUX。但我不知道如何将单个输出设置为高阻抗。

LIBRARY ieee; 
USE ieee.std_logic_1164.all; 

ENTITY buffered_mux_4x1 IS 
    PORT (a, b, c, d: IN BIT;
        sel: IN NATURAL RANGE 0 TO 3;
        ena: IN BIT;
        y: OUT BIT);
END buffered_mux_4x1;

ARCHITECTURE myarch OF buffered_mux_4x1 IS
    SIGNAL x: BIT;
BEGIN
    x <= a WHEN sel=0 ELSE --MUX
         b WHEN sel=1 ELSE
         c WHEN sel=2 ELSE
         d;
    y <= x WHEN ena='1' ELSE -- Tristate buffer
          ???
END myarch;

以下是在启用设置为“0”时将输出设置为高阻抗的原始代码:

LIBRARY ieee; 
USE ieee.std_logic_1164.all; 

ENTITY buffered_mux IS 
    PORT (a, b, c, d: IN STD_LOGIC_VECTOR(7 DOWNTO 0);
        sel: IN NATURAL RANGE 0 TO 3;
        ena: IN STD_LOGIC;
        y: OUT STD_LOGIC_VECTOR(7 DOWNTO 0));
END buffered_mux;

ARCHITECTURE myarch OF buffered_mux IS
    SIGNAL x: STD_LOGIC_VECTOR(7 DOWNTO 0);
BEGIN
    x <= a WHEN sel=0 ELSE --MUX
         b WHEN sel=1 ELSE
         c WHEN sel=2 ELSE
         d;
    y <= x WHEN ena='1' ELSE -- Tristate buffer
        (OTHERS => 'Z');
END myarch;

问题来了:

【问题讨论】:

  • 你不应该使用类型位,而只能使用 std_logic 和 std_logic_vector。然后您可以将 y 设置为“z”。但是,如果您的目标是 FPGA,您也不应该使用三态逻辑。除了实例化一个外部焊盘...
  • 成功了!谢谢!我使用了这个符号:y &lt;= x WHEN ena='1' ELSE 'Z' WHEN ena='0'; 可以吗?
  • 不客气!实际上,您甚至不需要第二个。只是其他'z'很好
  • 只要你不要对 ena 做疯狂的事情,比如将其设置为 'x' 或 'z'
  • 你最好避免使用 x 作为信号名称,因为 'x' 是一个信号值...

标签: vhdl quartus


【解决方案1】:

y: OUT std_logic);

你可以使用

y <= x WHEN ena='1' ELSE 'z';

编辑:
正如我和另一位用户评论的那样,即使语法正确,FPGA 内部(大多数,如果不是全部)也不支持高阻抗。它应该在焊盘上使用供应商特定的块来实现。
你应该忘记 BIT 类型,永远不要使用它。 std_logic(_vector)、有符号和无符号是用于综合的正常逻辑值。还有一些其他类型,例如用于总线大小的整数。
所以确实 a、b、c、d、ena 和 x 也应该是 std_logic(_vector)。取决于它来自哪里(它只是一个内部信号吗?),sel 也是,即使某些工具可能正确解释自然存在。

【讨论】:

  • x 应该是相同的类型或在类型转换后评估。 y 的两个并发信号分配应该合并。请注意英特尔® Quartus® Prime 专业版用户指南设计建议 UG-20131 | 2019.11.0,1 1.6.1。三态信号“仅当连接到顶级双向或输出引脚时才使用三态信号。...综合软件必须将三态通过层次结构推到顶层,以使用上的三态驱动程序英特尔 FPGA 设备的输出引脚....” OP 没有描述生成的建议使用带缓冲区的 4 到 8 多路复用器。
猜你喜欢
  • 1970-01-01
  • 2021-06-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多