微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > vhdl 求大神指点

vhdl 求大神指点

时间:10-02 整理:3721RD 点击:
代码如下
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;
LIBRARY WORK;
ENTITY TEST IS
   PORT (
   CLK : IN  std_logic;
   d : out std_logic_vector(3 downto 0));
END TEST;



ARCHITECTURE SIM OF TEST IS
   FUNCTION TMR (A,B,C:STd_LOGIC_VECTOR( 3 DOWNTO 0))     -- 三路表决器函数
  RETURN STD_LOGIC_VECTOR IS
   variable RESULT : STD_LOGIC_VECTOR(3 DOWNTO 0);
   begin
     for i in 3 to 0  loop
      RESULT(i) := ((A(i) AND B(i)) OR (C(i) AND B(i)) OR (A(i) AND C(i)))   ;   
   END LOOP;
    RETURN  RESULT;
  END FUNCTION TMR;
  
  SIGNAL A :STD_LOGIC_VECTOR(3 DOWNTO 0);
  SIGNAL B :STD_LOGIC_VECTOR(3 DOWNTO 0);
  SIGNAL C :STD_LOGIC_VECTOR(3 DOWNTO 0);
   
     BEGIN
     P_RUN ROCESS(CLK)  
     BEGIN
       IF CLK='1' THEN
         A<="1101";
         B<="1111";
         C<="1111";
         D<= TMR(A,B,C);---A,B,C调用函数表决
       ELSE
          A<="0000";
         B<="1000";
         C<="0000";
         D<= TMR(A,B,C);
       END IF;
     END PROCESS  P_RUN;
     
     END SIM;
  
tb文件给一个时钟信号
仿真结果如下:三路表决结果出错,未初始化态。




   初始态



    函数赋值无效怎么搞

莫沉,顶起

你或者改成用复位来实现初始化,或者
SIGNAL A :STD_LOGIC_VECTOR(3 DOWNTO 0) := 0
好像是这样的,你多尝试几遍

上一篇:后仿真的问题
下一篇:vhdl延时

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top