VHDL编译成功,但做试验有问题,请大侠知道
<br /> -- 表示8位数值比较器>=DCH,输出=1<br />LIBRARY IEEE ;<br />USE IEEE.STD_LOGIC_1164.ALL ;<br />ENTITY comparator_bc IS <br />PORT ( dataA : IN STD_LOGIC_VECTOR ( 7 DOWNTO 0 ) ;<br /> rfmute : IN STD_LOGIC;<br /> greater_bc : OUT STD_LOGIC ); -- A大于DCH输出信号<br />END ENTITY comparator_bc ;<br /><br />ARCHITECTURE behavioral OF comparator_bc IS<br />SIGNAL dataB : STD_LOGIC_VECTOR ( 7 DOWNTO 0 ) ;--can't in<br /><br />BEGIN<br />inst_comparator : PROCESS ( rfmute,dataA, dataB )<br />BEGIN<br /> dataB <= "11011100"; --dataB=DCH<br /> IF ( rfmute='1' ) THEN<br /> FOR i IN 7 DOWNTO 0 LOOP<br /> IF ( dataA ( i ) = '1' AND dataB ( i ) = '0' ) THEN<br /> greater_bc <= '1' ;<br /> EXIT ; -- 已经判断出dataA> dataB,则跳出循环<br /> ELSE<br /> greater_bc <= '0' ;<br /> END IF;<br /> END LOOP; <br /> ELSE<br /> greater_bc <= '0' ;<br /> END IF ;<br />END PROCESS inst_comparator ;<br />END ARCHITECTURE behavioral ;<br /><br />在maxplus2试验时,EXIT要删除,否则编译不能通过。<br />做试验时,在高四位输入为1101时输出改变,与低四位无关,不知道程序有什么问题。请高手指点。谢谢!重新试验只与最低位有关,
重新试验只与最低位有关,与其他位无关。不知道程序那儿有问题程序有点问题吧,等于时就输不出1
loop 循环我很少用,没实验过!那一般用什么语句解决?
那一般用什么语句解决?用变量不要用信号
signal定义的信号要到最后一个生效,variable 一有变化就跟着变。这里用到了许多if,编译是不是有告警,“the last if will take effect".<br />楼主可以试试!您说的对,如何用VARIABLE,请您指点一下。
您说的对,编译警告显示:found multiple assignments to the same signal or signal bit"greater_bc"-only the last assignment will take effect.请教如何用VARIABLE,请指点。给个例题也可以。谢谢花了两天解决这个问题,少用FOR LOOP语句,供大家学习。
LIBRARY IEEE ;<br />USE IEEE.STD_LOGIC_1164.ALL ;<br />ENTITY comparator_bc IS -- 表示8位数值比较器>=DCH,<br />PORT ( dataA : IN STD_LOGIC_VECTOR ( 7 DOWNTO 0 ) ;<br /> rfmute : IN STD_LOGIC;<br /> bigerout : OUT STD_LOGIC ); -- A大于DCH输出信号<br />END ENTITY comparator_bc ;<br /><br />ARCHITECTURE behavioral OF comparator_bc IS<br />SIGNAL temp_dataA : STD_LOGIC_VECTOR( 4 DOWNTO 0);<br />BEGIN<br />temp_dataA <= dataA(4) & dataA(3) & dataA(2) & dataA(1) & dataA(0);<br />inst_comparator : PROCESS ( rfmute,dataA(7),dataA(6),dataA(5),dataA(4),dataA(3),dataA(2),dataA(1),dataA(0))<br />BEGIN<br /> IF ( rfmute= '0') THEN<br /> bigerout <= '1' ;<br /> ELSE <br /> IF ( dataA(7)='1' AND dataA(6)='1' AND dataA(5)='1' ) THEN<br /> bigerout <= '1' ;<br /> ELSIF (dataA(7)='1' AND dataA(6)='1' AND dataA(5)='0') THEN<br /> CASE temp_dataA IS<br /> WHEN "11111" => bigerout <= '1' ;<br /> WHEN "11110" => bigerout <= '1' ;<br /> WHEN "11101" => bigerout <= '1' ;<br /> WHEN "11100" => bigerout <= '0' ;<br /> WHEN OTHERS => bigerout <= '0' ;<br /> END CASE; -- 已经判断出dataA> DCH,<br /> ELSE <br /> bigerout <= '0' ;<br /> END IF;<br /> END IF;<br /> END PROCESS inst_comparator ;<br />END ARCHITECTURE behavioral ;<br />
页:
[1]