小弟进来做个小程序 仿真过不了!<br />index 是个buffer端口 通过查表所得数值与其做加法运算 然后传给下一级使用,同时返回给输入端,由下一个输入再次更新~~<br />程序如下<br />--------------------------------------------------------------------<br /><br />------------<br />-- Company: <br />-- Engineer:<br />--<br />-- Create Date: 22:48:39 05/04/07<br />-- Design Name: <br />-- Module Name: kuis_1 - Behavioral<br />-- Project Name: <br />-- Target Device: <br />-- Tool versions: <br />-- Description:<br />--<br />-- Dependencies:<br />-- <br />-- Revision:<br />-- Revision 0.01 - File Created<br />-- Additional Comments:<br />-- <br />--------------------------------------------------------------------<br /><br />------------<br />library IEEE;<br />use IEEE.STD_LOGIC_1164.ALL;<br />use IEEE.STD_LOGIC_ARITH.ALL;<br />use IEEE.STD_LOGIC_UNSIGNED.ALL;<br /><br />---- Uncomment the following library declaration if instantiating<br />---- any Xilinx primitives in this code.<br />--library UNISIM;<br />--use UNISIM.VComponents.all;<br /><br />entity kuis_1 is<br /> Port ( code : in std_logic_vector(3 downto 0);<br /> index : buffer std_logic_vector(8 downto 0));<br />end kuis_1;<br /><br />architecture Behavioral of kuis_1 is<br />function adder9<br /> ( a:std_logic_vector;<br /> b:std_logic_vector<br /> )<br /> return std_logic_vector is<br />variable vsum : std_logic_vector(8 downto 0);<br />variable carry : std_logic;<br />variable i:integer;<br />begin <br /><br /> carry :='0';<br /> for i in 0 to 8 loop<br /> vsum(i):= (a(i) xor b(i)) xor carry;<br /> carry := (a(i) and b(i)) or (carry and (a(i) or b(i)));<br /> end loop;<br /> return vsum;<br />end adder9;<br />signal tmp:std_logic_vector(8 downto 0);<br />signal tmp1:std_logic_vector(8 downto 0);<br />begin<br />p1:process(code)<br />begin<br /> case code is<br /> when"0000"=> tmp<="111111111"; <br /> when"0001"=> tmp<="111111111"; <br /> when"0010"=> tmp<="111111111"; <br /> when"0011"=> tmp<="111111111"; <br /> when"0100"=> tmp<="000000010"; <br /> when"0101"=> tmp<="000000100"; <br /> when"0110"=> tmp<="000000110"; <br /> when"0111"=> tmp<="000001000";<br /> when"1000"=> tmp<="111111111"; <br /> when"1001"=> tmp<="111111111"; <br /> when"1010"=> tmp<="111111111"; <br /> when"1011"=> tmp<="111111111"; <br /> when"1100"=> tmp<="000000010"; <br /> when"1101"=> tmp<="000000100"; <br /> when"1110"=> tmp<="000000110"; <br /> when"1111"=> tmp<="000001000"; <br /> when others=> tmp<="ZZZZZZZZZ"; <br /> end case;<br />end process p1;<br />p2:process(tmp,index)<br />begin<br />tmp1<=adder9(index,tmp);<br />index<=tmp1;<br />end process p2;<br />end Behavioral;<br /> |
|