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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
楼主: oscillator_cn1

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

[复制链接]
 楼主| 发表于 2011-2-11 10:24:58 | 显示全部楼层
本帖最后由 oscillator_cn1 于 2011-2-11 14:33 编辑




   那个,我的关注点不是这个,是指调用compare多少次的问题。待比较的数有8个与16个的时候调用的次数不同(7次与15次),是否调用compare的这部分代码每次得重新调整?
 楼主| 发表于 2011-2-11 15:18:59 | 显示全部楼层


用三层共七个比较器选出最大/最小的值

具体又分成两种情况:无符号数比较和有符号数比较
这两种情况比较 ...
crestlab 发表于 2011-1-18 16:57



好像一个一个轮流来也是7个比较器
发表于 2011-2-11 21:58:27 | 显示全部楼层
回复 32# oscillator_cn1


    不知道我是否理解你的意图,如果因为参数化不能确定例化数量的话,只要申明和例化与参数是相关的,利用verilog2001标准里面的generate就可以解决了吧
 楼主| 发表于 2011-2-12 13:08:32 | 显示全部楼层


回复  oscillator_cn1


    不知道我是否理解你的意图,如果因为参数化不能确定例化数量的话,只要申明 ...
microsofthard 发表于 2011-2-11 21:58



谢谢!这个从没用过,所以早忘到爪哇岛了。。。
用这个应该可以。我去改一下试试。
 楼主| 发表于 2011-2-14 18:18:02 | 显示全部楼层
各位:
      把代码改了一下,请帮忙看看哪儿还有问题。先谢谢了。
comp.v

`timescale   1ns/1ns
module comp(
  in1,//previous bigger(smaller) number
  in1_index,
  in2,//current data input
  in2_index,
  tc,
  min_max,
  data_out,
  data_index
  );
  
  parameter WIDTH =           4;         // element WIDTH
  parameter NUM_INPUTS =      8;         // number of elements in input array
  parameter INDEX_WIDTH =     3;         // size of index pointer = ceil(log2(NUM_INPUTS))

  input  [WIDTH-1:0]       in1;
  input  [WIDTH-1:0]       in2;
  input  [INDEX_WIDTH-1:0] in1_index;
  input  [INDEX_WIDTH-1:0] in2_index;
  input                    tc;
  input                    min_max;
  output [WIDTH-1:0]       data_out;
  output [INDEX_WIDTH-1:0] data_index;
  
  wire   [WIDTH-1:0]       comp1;
  wire   [WIDTH-1:0]       comp2;
  wire                     comp_out;
  
  wire                     comp_tmp;
  
  assign comp1=tc?{~in1[WIDTH-1],in1[WIDTH-2:0]}:in1;
  assign comp2=tc?{~in2[WIDTH-1],in2[WIDTH-2:0]}:in2;
  
  //which one is even bigger

  assign comp_tmp=(comp1>=comp2)?1'b1:1'b0;
  assign comp_out=min_max?(~comp_tmp):comp_tmp;//when min_max=1, we need bigger number
                                               //when min_max=0, we need the small one
  assign data_out=comp_out?in2:in1;
  assign data_index=comp_out?in2_index:in1_index;
  
endmodule

DW_minmax.v

`timescale   1ns/1ns
module DW_minmax_tmp(
    a,
    tc,
    min_max,
    value,
    index
    );
    parameter WIDTH =           4;         // element WIDTH
    parameter NUM_INPUTS =      8;         // number of elements in input array
    parameter INDEX_WIDTH =     3;         // size of index pointer = ceil(log2(NUM_INPUTS))

    input  [ WIDTH* NUM_INPUTS-1:0] a;       //Concatenated input vector
    input                           tc;      //0=unsigned,1=signed
    input                           min_max; //0=find min,1=find max
    output [ WIDTH-1:0]             value;   //min or max value found
    output [ INDEX_WIDTH-1:0]       index;   //index to value found
   
    reg [ WIDTH-1:0]b[ NUM_INPUTS-1:0];
   
    reg [ WIDTH* NUM_INPUTS-1:0] a_tmp;
    reg [ INDEX_WIDTH-1:0]       pi;
   
    //wire [ INDEX_WIDTH-1:0]       j;
        
    wire [ WIDTH-1:0]            value;
    wire [ INDEX_WIDTH-1:0]      index;
   
    wire [WIDTH-1:0]in1[NUM_INPUTS-1:0];
    wire [INDEX_WIDTH-1:0] index_in1[NUM_INPUTS-1:0];


    always @(a)
    begin: takeout
        a_tmp=a;
        for (pi=0;pi< NUM_INPUTS-1;pi=pi+1)
        begin
            b[pi] = a_tmp[ WIDTH-1:0];
            a_tmp = a_tmp>> WIDTH;
        end
        b[pi] = a_tmp[ WIDTH-1:0];
        a_tmp = a_tmp>> WIDTH;
    end
   
    assign in1[0]=b[0];
    assign index_in1[0]=0;
  
     generate
     genvar i;
       for(i=1;i<NUM_INPUTS;i=i+1)
       begin:int_comp     
             comp #(WIDTH,NUM_INPUTS,INDEX_WIDTH) compare(
                      . in1       ( in1[i-1]       ),
                      . in1_index ( index_in1[i-1] ),
                      . in2       ( b[i]           ),
                      . in2_index ( i              ),
                      . tc        ( tc             ),
                      . min_max   ( min_max        ),
                      . data_out  ( in1[i]         ),
                      . data_index( index_in1[i]   )
                );
       end
       assign value=in1[NUM_INPUTS-1];
       assign index=index_in1[NUM_INPUTS-1];
    endgenerate

endmodule
发表于 2011-2-16 05:58:58 | 显示全部楼层
偶不太懂这个
发表于 2011-2-16 22:28:28 | 显示全部楼层
纯组合电路
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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


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

GMT+8, 2024-12-23 12:36 , Processed in 0.018142 second(s), 7 queries , Gzip On, Redis On.

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