需要在一个时钟周期内(125MHz)完成,我想进行并行比较,没找到例子,自己写了一个,思路就是1和2比,较大的一个和3比,再得到一个和4比,依次类推。时序仿真结果不太稳定,最大值的位置应该在0-9内,但是结果经常出现10-15,不知道错在哪儿。另外有没有更好的办法能推荐一下,谢谢。<br />library ieee;<br />use ieee.std_logic_1164.all;<br />use ieee.std_logic_unsigned.all;<br />use ieee.std_logic_arith.all;<br /><br />entity max19_10_comb is<br />port(<br /> clock:in std_logic;<br /> data0,data1,data2,data3,data4,data5,data6,data7:in std_logic_vector(18 downto 0);<br /> data8,data9:in std_logic_vector(18 downto 0);<br /> result_value:out std_logic_vector(18 downto 0);<br /> result_index:out std_logic_vector(3 downto 0)<br /> );<br />end max19_10_comb;<br /><br />architecture beha of max19_10_comb is<br /> signal index0:std_logic_vector(3 downto 0):="0000";<br /> signal index1:std_logic_vector(3 downto 0):="0001";<br /> signal index2:std_logic_vector(3 downto 0):="0010";<br /> signal index3:std_logic_vector(3 downto 0):="0011";<br /> signal index4:std_logic_vector(3 downto 0):="0100";<br /> signal index5:std_logic_vector(3 downto 0):="0101";<br /> signal index6:std_logic_vector(3 downto 0):="0110";<br /> signal index7:std_logic_vector(3 downto 0):="0111";<br /> signal index8:std_logic_vector(3 downto 0):="1000";<br /> signal index9:std_logic_vector(3 downto 0):="1001";<br /> signal result01,result02,result03,result04,result05,result06,result07:std_logic_vector(18 downto 0);<br /> signal result08,result09:std_logic_vector(18 downto 0);<br /> signal index01,index02,index03,index04,index05,index06,index07:std_logic_vector(3 downto 0);<br /> signal index08,index09:std_logic_vector(3 downto 0);<br /><br />begin<br /> process(data0,data1,data2,data3,data4,data5,data6,data7,data8,data9,result01,result02,result03,result04,result05,result06,result07,result08,result09,index01,index02,index03,index04,index05,index06,index07,index08,index09)<br /> begin<br /> if data0 > data1 then<br /> result01 <= data0;<br /> index01 <= index0;<br /> else<br /> result01 <= data1;<br /> index01 <= index1;<br /> end if;<br /> <br /> if result01 > data2 then<br /> result02 <= result01;<br /> index02 <= index01;<br /> else<br /> result02 <= data2;<br /> index02 <= index2;<br /> end if;<br /> <br /> if result02 > data3 then<br /> result03 <= result02;<br /> index03 <= index02;<br /> else<br /> result03 <= data3;<br /> index03 <= index3;<br /> end if;<br /> <br /> if result03 > data4 then<br /> result04 <= result03;<br /> index04 <= index03;<br /> else<br /> result04 <= data4;<br /> index04 <= index4;<br /> end if;<br /> <br /> if result04 > data5 then<br /> result05 <= result04;<br /> index05 <= index04;<br /> else<br /> result05 <= data5;<br /> index05 <= index5;<br /> end if;<br /> <br /> if result05 > data6 then<br /> result06 <= result05;<br /> index06 <= index05;<br /> else<br /> result06 <= data6;<br /> index06 <= index6;<br /> end if;<br /> <br /> if result06 > data7 then<br /> result07 <= result06;<br /> index07 <= index06;<br /> else<br /> result07 <= data7;<br /> index07 <= index7;<br /> end if;<br /> <br /> if result07 > data8 then<br /> result08 <= result07;<br /> index08 <= index07;<br /> else<br /> result08 <= data8;<br /> index08 <= index8;<br /> end if;<br /> <br /> if result08 > data9 then<br /> result09 <= result08;<br /> index09 <= index08;<br /> else<br /> result09 <= data9;<br /> index09 <= index9;<br /> end if;<br /><br /> end process;<br /> <br /> process(clock)<br /> begin<br /> if clock'EVENT and clock = '1' then<br /> result_value <= result09;<br /> result_index <= index09;<br /> end if;<br /> end process;<br />end beha;<br /> |
|