10个19位数据比较,找出最大值,怎么做比较好?

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

!

没有尝试过!组合电路比较复杂吧,如果不影响实时性的话,可以多次比较
zhang123 发表于 2007-11-13 13:36 | 显示全部楼层

冒泡!1和2比,较大的一个和3比,再得到一个和4比

这个显然不是一次比较了。较大的一个和3比,是第二次比较过程。
风中De舞者 发表于 2007-11-20 11:42 | 显示全部楼层

你这根本不可能在一个时钟周期内完成比较

结果根本就是错的<br /><br />信号的赋值都需要在1个时钟周期以后才能赋值<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;data0&nbsp;&gt&nbsp;data1&nbsp;then<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result01&nbsp;&lt=&nbsp;data0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;index01&nbsp;&lt=&nbsp;index0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result01&nbsp;&lt=&nbsp;data1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;index01&nbsp;&lt=&nbsp;index1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end&nbsp;if;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;result01&nbsp;&gt&nbsp;data2&nbsp;then<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result02&nbsp;&lt=&nbsp;result01;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;index02&nbsp;&lt=&nbsp;index01;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result02&nbsp;&lt=&nbsp;data2;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;index02&nbsp;&lt=&nbsp;index2;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end&nbsp;if;<br /><br />你看好&nbsp;&nbsp;第2个IF里的RESULT01根本就不是第1个IF里比较出来的DATA0和DATA1里面的大者&nbsp;&nbsp;而是寄存器RESULT01里的初值&nbsp;&nbsp;RESULT01里的值需要在第1个IF语句执行后再过1个时钟周期才变成DATA0和DATA1里面的大者&nbsp;&nbsp;<br /><br />因此你这个程序得出的结果本身就是错的&nbsp;&nbsp;<br /><br />至于&nbsp;result_index&nbsp;也是一样&nbsp;&nbsp;刚开始应该显示的是寄存器里的初值&nbsp;&nbsp;1个时钟后显示最大值的序号&nbsp;&nbsp;至于为什么不定&nbsp;&nbsp;是因为你没有给&nbsp;result_index&nbsp;寄存器初值&nbsp;&nbsp;所以寄存器初值不定<br /><br />另外你第1个进程的敏感变量太多了&nbsp;&nbsp;如果需要在改变数据后立即执行比较的话只需要写data0,data1,data2,data3,data4,data5,data6,data7,data8,data9就可以了&nbsp;&nbsp;没必要把后面的也写上&nbsp;&nbsp;因为后面的变量不止改变一次&nbsp;&nbsp;这样重起进程纯属做无用功&nbsp;&nbsp;而且可能出错&nbsp;&nbsp;如果可以的话我还建议把频率调低一点<br /><br />以上纯属个人意见&nbsp;&nbsp;
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

3

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部