VHDL 信号分配没有明显的原因不起作用

Posted

技术标签:

【中文标题】VHDL 信号分配没有明显的原因不起作用【英文标题】:VHDL signal assigement doesnt work for no apparent reason 【发布时间】:2015-08-06 14:38:19 【问题描述】:

我在我的测试平台中为一个简单的 2out/1in reg 文件实体编写了这个过程,这里是测试平台的相关部分: (注意 - 这些信号是 std_logic_vector(X downto 0))

input : process is
begin
    wait for 30 ns;

    input_adr1  <= "00000";
    input_adr3  <= "00000";
    input_data3 <= "00000000000000000000000000000000";
    input_en3   <= '1';
    wait for 10 ns;
    input_en3 <= '0';
    wait for 10 ns;

    input_adr1  <= "00001";
    input_adr3  <= "00001";
    input_data3 <= "00000000000000000000000000000001";
    input_en3   <= '1';
    wait for 10 ns;
    input_en3 <= '0';
    wait for 10 ns;

    input_adr1  <= "00010";
    input_adr3  <= "00010";
    input_data3 <= "00000000000000000000000000000010";
    input_en3   <= '1';
    wait for 10 ns;
    input_en3 <= '0';
    wait for 10 ns;

    wait;
end process input;

但是,当我转到 ModelSim 检查波形时,信号 input_data3 永远不会改变 - 即使我在顺序代码中为其分配了值 0000、0001、0002(十六进制)。请注意,input_en3input_adr3 信号都表现正常。检查它:

  drivers input_data3
Drivers for /procesor_tstbnch/input_data3(31:0):
   U  : Signal /procesor_tstbnch/input_data3(31)
     0 : Driver /procesor_tstbnch/input
     U  : Element /procesor_tstbnch/register_file/in_data3(31)
    U  : Signal /procesor_tstbnch/input_data3(30)
     0 : Driver /procesor_tstbnch/input
     U  : Element /procesor_tstbnch/register_file/in_data3(30)
   U  : Signal /procesor_tstbnch/input_data3(29)
     0 : Driver /procesor_tstbnch/input
      U  : Element /procesor_tstbnch/register_file/in_data3(29)
    U  : Signal /procesor_tstbnch/input_data3(28)
      0 : Driver /procesor_tstbnch/input
      U  : Element /procesor_tstbnch/register_file/in_data3(28)
    U  : Signal /procesor_tstbnch/input_data3(27)
      0 : Driver /procesor_tstbnch/input
      U  : Element /procesor_tstbnch/register_file/in_data3(27)
    U  : Signal /procesor_tstbnch/input_data3(26)
      0 : Driver /procesor_tstbnch/input
     U  : Element /procesor_tstbnch/register_file/in_data3(26)
   U  : Signal /procesor_tstbnch/input_data3(25)
     0 : Driver /procesor_tstbnch/input
      U  : Element /procesor_tstbnch/register_file/in_data3(25)
    U  : Signal /procesor_tstbnch/input_data3(24)
      0 : Driver /procesor_tstbnch/input
     U  : Element /procesor_tstbnch/register_file/in_data3(24)
    U  : Signal /procesor_tstbnch/input_data3(23)
      0 : Driver /procesor_tstbnch/input
      U  : Element /procesor_tstbnch/register_file/in_data3(23)
    U  : Signal /procesor_tstbnch/input_data3(22)
      0 : Driver /procesor_tstbnch/input
     U  : Element /procesor_tstbnch/register_file/in_data3(22)
    U  : Signal /procesor_tstbnch/input_data3(21)
     0 : Driver /procesor_tstbnch/input
      U  : Element /procesor_tstbnch/register_file/in_data3(21)
    U  : Signal /procesor_tstbnch/input_data3(20)
      0 : Driver /procesor_tstbnch/input
      U  : Element /procesor_tstbnch/register_file/in_data3(20)
   U  : Signal /procesor_tstbnch/input_data3(19)
     0 : Driver /procesor_tstbnch/input
     U  : Element /procesor_tstbnch/register_file/in_data3(19)
   U  : Signal /procesor_tstbnch/input_data3(18)
     0 : Driver /procesor_tstbnch/input
     U  : Element /procesor_tstbnch/register_file/in_data3(18)
    U  : Signal /procesor_tstbnch/input_data3(17)
     0 : Driver /procesor_tstbnch/input
      U  : Element /procesor_tstbnch/register_file/in_data3(17)
   U  : Signal /procesor_tstbnch/input_data3(16)
      0 : Driver /procesor_tstbnch/input
      U  : Element /procesor_tstbnch/register_file/in_data3(16)
   U  : Signal /procesor_tstbnch/input_data3(15)
      0 : Driver /procesor_tstbnch/input
      U  : Element /procesor_tstbnch/register_file/in_data3(15)
    U  : Signal /procesor_tstbnch/input_data3(14)
      0 : Driver /procesor_tstbnch/input
     U  : Element /procesor_tstbnch/register_file/in_data3(14)
    U  : Signal /procesor_tstbnch/input_data3(13)
     0 : Driver /procesor_tstbnch/input
     U  : Element /procesor_tstbnch/register_file/in_data3(13)
    U  : Signal /procesor_tstbnch/input_data3(12)
      0 : Driver /procesor_tstbnch/input
     U  : Element /procesor_tstbnch/register_file/in_data3(12)
    U  : Signal /procesor_tstbnch/input_data3(11)
      0 : Driver /procesor_tstbnch/input
      U  : Element /procesor_tstbnch/register_file/in_data3(11)
    U  : Signal /procesor_tstbnch/input_data3(10)
      0 : Driver /procesor_tstbnch/input
      U  : Element /procesor_tstbnch/register_file/in_data3(10)
    U  : Signal /procesor_tstbnch/input_data3(9)
      0 : Driver /procesor_tstbnch/input
      U  : Element /procesor_tstbnch/register_file/in_data3(9)
    U  : Signal /procesor_tstbnch/input_data3(8)
      0 : Driver /procesor_tstbnch/input
      U  : Element /procesor_tstbnch/register_file/in_data3(8)
    U  : Signal /procesor_tstbnch/input_data3(7)
      0 : Driver /procesor_tstbnch/input
      U  : Element /procesor_tstbnch/register_file/in_data3(7)
    U  : Signal /procesor_tstbnch/input_data3(6)
      0 : Driver /procesor_tstbnch/input
      U  : Element /procesor_tstbnch/register_file/in_data3(6)
   U  : Signal /procesor_tstbnch/input_data3(5)
      0 : Driver /procesor_tstbnch/input
      U  : Element /procesor_tstbnch/register_file/in_data3(5)
    U  : Signal /procesor_tstbnch/input_data3(4)
      0 : Driver /procesor_tstbnch/input
      U  : Element /procesor_tstbnch/register_file/in_data3(4)
    U  : Signal /procesor_tstbnch/input_data3(3)
     0 : Driver /procesor_tstbnch/input
      U  : Element /procesor_tstbnch/register_file/in_data3(3)
    U  : Signal /procesor_tstbnch/input_data3(2)
      0 : Driver /procesor_tstbnch/input
      U  : Element /procesor_tstbnch/register_file/in_data3(2)
   U  : Signal /procesor_tstbnch/input_data3(1)
      1 : Driver /procesor_tstbnch/input
     U  : Element /procesor_tstbnch/register_file/in_data3(1)
    U  : Signal /procesor_tstbnch/input_data3(0)
      0 : Driver /procesor_tstbnch/input
     U  : Element /procesor_tstbnch/register_file/in_data3(0)

我错过了什么?我不确定我是否理解为什么这个信号分配没有通过。

编辑:我还尝试将所有分配移动到另一个进程中的 input_data3 ,它仍然永远不会改变。

这里是input_data3的驱动:

【问题讨论】:

波形中显示的信号是您分配的确切测试台信号,还是 UUT 内部的信号? 您可以将您的问题发到electronics.stackexchange.com。 那些来自测试台@Hanno,谢谢,下次记住了:) 您是否有另一个分配给 input_data3 的其他地方导致了多个冲突的驱动程序问题? 否 - 只有这 3 个(两者都没有发生)。 input_data3 出现在我的代码中的唯一其他时间是在端口映射中 【参考方案1】:

查看您的驱动程序列表。例如,对于第 1 位,您的进程 (Driver /procesor_tstbnch/input) 正在驱动 1。然而,信号由一个叫做/procesor_tstbnch/register_file/in_data3(1)的东西驱动,它正在驱动一个U。总体结果是该位未定义 (U)。

register_file/in_data3 是什么?

【讨论】:

register_file : 实体 work.reg_file 端口映射 (... in_data3 => input_data3, ...); 所以in_data 是您模块的输入/输出,并且正在将数据(恰好未定义)驱动到您的模块中。但是您也从流程中驱动相同的信号 inside 您的模块 - 您不能这样做。或者,准确地说,您可以,因为这些是已解析的信号,但您不应该这样做。

以上是关于VHDL 信号分配没有明显的原因不起作用的主要内容,如果未能解决你的问题,请参考以下文章

动画在wordpress中不起作用

自定义 Django 信号不起作用

iOS 7 If 语句分配 UIImage 不起作用

SpringBoot异步任务及Async不起作用的原因

Qml 注册类型的构造函数中的发射信号不起作用

readyReadStandardOutput 信号不起作用