在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
楼主: oscillator_cn1

[求助] HELP!求最大最小值

[复制链接]
 楼主| 发表于 2011-1-28 10:40:50 | 显示全部楼层
该模块只做验证环境的一部分使用,不需要综合。
主要是一共有多少个数要比较,然后每个数多少位,这些都不知道(是可配置的)。所以上面有人说调用6次比较模块,这个就不能确定到底需要调用多少次了。所以......要是要求该模块是可综合的,然后所有参数又是可配置的,然后又没有时钟(模块接口定死了)。这个模块该写成什么样的?最好能提供代码(部分也可以),因为我想了一下,不知道该怎么做,目前只能做成这样。有更好的办法当然要学习了。先说声谢谢了。
好像上面有说到我是一位一位比较的,不知道是我写错了呢,还是有人看错了,我只比较了符号位。tc=1时(signed),在我觉得,如果两者符号位相同的话,当然是值大的数更大了,如果符号位不同的话,正的肯定比负的大。
至于没有用补码比较的问题,我的想法是这样的:由于比较之后还要输出最大最小值,所以不大想对数值进行改变。要是采用补码的话,我还得输出前给它变回去。。。。
以上是我写该模块的一些想法,不知道有哪些地方是没考虑到的,哪些地方又过于担心了,还请大家帮忙勘正。
 楼主| 发表于 2011-1-28 10:48:11 | 显示全部楼层



确实啊。多少个数不确定这点最恼火。另外,取补码之后,如果这个数是最大值或者最小值,那么,我还需要把它的值输出,这时肯定不能给出补码,还是要给它自己。那我不是得在补码比较之前,先记录一下哪几个数是负的?这点我不知道怎么解决,所以才没用补码。
 楼主| 发表于 2011-1-28 10:58:06 | 显示全部楼层


回复  oscillator_cn1


    抱歉,年关了,我自己都忙得晕头转向的。没时间帮你写。
yongfenr 发表于 2011-1-25 09:19




那么,年后,我等着,您什么时候有空??
我觉得我还是挺要求上进的,既然被说的一无是处,当然要刨根问底了。尊驾稍微花个十几分钟,半个小时的,就低得上我一个月的苦思冥想了。您,这点时间都没有么?
发表于 2011-1-28 14:34:48 | 显示全部楼层
回复 23# oscillator_cn1
module comparator (
                a,
                b,
                tc ,
                cmp_out
                );

    parameter   DAT_WID = 4 ;
input  [DAT_WID-1:0] a ,b;
input    tc ; //0 :unsigned ; 1: signed
output [DAT_WID-1:0] cmp_out ; // 00 : a=b ;
                                                     // 01 : a>b ;
                                                     // 10 : a<b ;
wire  [DAT_WID-1:0] cmp_a ,cmp_b;
assign cmp_a = tc ? {~cmp_a[DAT_WID-1],cmp_a[DAT_WID-2:0]}:a;
assign cmp_b = tc ? {~cmp_b[DAT_WID-1],cmp_b[DAT_WID-2:0]}:b;
always @ ( cmp_a or cmp_b )
begin
   if ( cmp_a > cmp_b ) cmp_out = 2'b10 ;
  else if ( cmp_a < cmp_b ) cmp_out = 2'b01 ;
  else cmp_out = 2'b00 ;
end
endmodule

原理参看我18楼的回复。
发表于 2011-1-28 15:29:13 | 显示全部楼层
楼上的代码很好,简洁明了!
 楼主| 发表于 2011-1-29 14:39:57 | 显示全部楼层


回复  oscillator_cn1
module comparator (
                a,
                b,
                 ...
yongfenr 发表于 2011-1-28 14:34




   
谢谢百忙之中拨冗相助!
不过调用的时候还是有些疑问:调用的时候好像没办法参数化自动化吧,是否是parameter的值一变,就得修改一下代码呢?
发表于 2011-1-29 21:09:10 | 显示全部楼层
学习一下!
发表于 2011-1-30 09:23:09 | 显示全部楼层
回复 26# oscillator_cn1


    参数化的调用格式: 调用模块名  #(传递参数)  例化名 (端口);
    参数传递跟端口例化一样,不写的采用模块内的默认参数。
   comparator   #(
                             .DAT_WID ( 8)
                             )
                          DUT
                            (
                             .a ( data_a ) ,
                             .b( data_b) ,
                              .
                              .
                    ) ;
发表于 2011-1-30 09:29:45 | 显示全部楼层
回复 26# oscillator_cn1


    如果整个工程调用的这个模块参数都一致的话,可以把parameter 的参数化方式改为define的方式,就不需要在调用时传递参数,只需要把difne声明放到最顶层。
   但这种声明是全局影响的,不是很推荐。
发表于 2011-1-30 13:48:30 | 显示全部楼层
学习了!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条


小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-12-23 13:00 , Processed in 0.021363 second(s), 8 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表