Vhdl端口模式。。

img


10位选手抢答器,不知道这个输出不可取怎么修改,还有不知道如何连接各个模块。。

  • 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/7718603
  • 你也可以参考下这篇文章:用VHDL语言实现一个时延模块,可以满足任意时钟周期的时延。代码如下:
  • 除此之外, 这篇博客: VHDL信号与变量的区别中的 信号与变量的区别 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • (1)在进程中只能将信号加入信号敏感表,而不能将变量加入信号敏感表。因为只有信号才能将进程外的信息带入进程内部。

    从以下代码中体会信号和变量的区别。

    SIGNAL s1 ,s2 : STD_LOGIC; 
    
    SIGNAL svec : STD_LOGIC_VECTOR (0 TO 7);
    
     ... 
    
    PROCESS ( s1 ,s2 ) 
    
    VARIABLE v1 ,v2 : STD_LOGIC;
    
    BEGIN
    
    ​	v1 := '1' ;            			-- 立即将 v1 置位为 1     
    
    ​	v2 := '1' ;            			-- 立即将 v2 置位为 1     
    
    ​	s1 <= '1' ;            			-- s1 被赋值为 1     
    
    ​	s2 <= '1' ;           			 -- 由于在本进程中这里的 s2 不是最后一个,因此此处赋值不起作用
    
    ​	svec(0) <= v1;          	   -- 将 v1 在上面的赋值 1 赋给svec(0)
    
    ​	svec(1) <= v2;            	 -- 将 v2 在上面的赋值 1 赋给svec(1)	
    
    ​	svec(2) <= s1;           	  -- 将 s1 在上面的赋值 1 赋给svec(2)
    
    ​	svec(3) <= s2;                  -- 将最下面的赋予 s2 的值'0' 赋给svec(3)
    
    ​	v1 := '0' ;            				-- 将 v1 置入新值 0     
    
    ​	v2 := '0' ;         				   -- 将 v2 置入新值 0    
    
    ​	s2 <= '0' ;          				  -- 由于这是 s2 最后一次赋值 赋值有效,此'0'将上面准备赋入的'1'覆盖掉 	 	svec(4) <= v1;             		 -- 将 v1 在上面的赋值 0 赋给svec(4) 
    
    ​	svec(5) <= v2;              		-- 将 v2 在上面的赋值 0 赋给svec(5)
    
    ​	svec(6) <= s1;            		   -- 将 s1 在上面的赋值 1 赋给svec(6)  
    
    ​	svec(7) <= s2;          -- 将 s2 在上面的赋值 0 赋给svec(7)
    
     END PROCESS ;