首页 文章

在端口映射中使用when ... else statment

提问于
浏览
0

我在端口映射中找不到任何关于使用... else statment的信息 . 它似乎是一个正确的形式,但当我编译时,我看到这样的错误:

错误(10500):Device.vhd(68)处文本“when”附近的VHDL语法错误;期待“)”或“,”

这可能是一个愚蠢的错误因为我仍然在vhdl新鲜 . 你能给我一个暗示吗?我会非常感谢任何帮助 . 这是代码,SDA端口是inout类型:

com : I2C_com port map (

             reset_en => reset_en,
             I2C_clock_port => SCL,
             clk => clk,
             sda_read_data <= SDA when RD ='1' else 'Z',
             sda_write_data => SDA 
        );

2 回答

  • 0

    首先,你的箭头指向错误的方向 . 对于端口关联,无论输入或输出端口如何,始终使用 => .

    第二:when / else构造不是像 a?x:y 这样的表达式在C中 . 它特定于when / else信号赋值:http://www.sigasi.com/content/signal-assignments-vhdl-withselect-whenelse-and-case

    您需要使用中间信号,或使用适配器功能:

    com : I2C_com port map(
            reset_en       => reset_en,
            I2C_clock_port => SCL,
            clk            => clk,
            sda_read_data  => SDA_or_z,
            sda_write_data => SDA
        );
    SDA_or_z <= SDA when RD = '1' else 'Z';
    

    要么:

    com : I2C_com port map(
            reset_en       => reset_en,
            I2C_clock_port => SCL,
            clk            => clk,
            sda_read_data  => myFunction(SDA,RD),
            sda_write_data => SDA
        );
    
  • 2

    当RD ='1'时,取一个信号temp <= SDA,否则'Z';然后分配sda_read_data <= temp;

相关问题