对32位向量的位进行排序。的Verilog

时间:2016-05-14 20:21:26

标签: sorting verilog digital-logic

我需要做一个设计来对32位向量的位进行排序(不确定它是否被称为向量),如下所示:

1010010101010 => 00000001111111

我必须有一个32位并行输入和一个串行输出,它必须是组合的。

我试过这样的事情:

assign c=in[0]+in[1]+in[2]+in[3]+in[4]+in[5]+in[6]+in[7]+in[8]+in[9]+in[10]+in[11]+in[12]+in[13]+in[14]+in[15]+in[16]+in[17]+in[18]+in[19]+in[20]+in[21]+in[22]+in[23]+in[24]+in[25]+in[26]+in[27]+in[28]+in[29]+in[30]+in[31];

assign out=(1<< c)-1;

但是如果算上那些,我想我需要做设计顺序。

你能帮帮我吗?试图理解verilog,我的头疼。

1 个答案:

答案 0 :(得分:0)

&#34; Serial out&#34;表示每个周期1位。您需要一个1位out信号和一个选择结果的32位之一的计数器。假设您的时钟被调用clk而您的低电平有效重置rstn

logic[31:0] result;
logic[4:0] cnt;
assign c=in[0]+in[1]+in[2]+in[3]+in[4]+in[5]+in[6]+in[7]+in[8]+in[9]+in[10]+in[11]+in[12]+in[13]+in[14]+in[15]+in[16]+in[17]+in[18]+in[19]+in[20]+in[21]+in[22]+in[23]+in[24]+in[25]+in[26]+in[27]+in[28]+in[29]+in[30]+in[31];
assign result = (1 << c) - 1;
always_ff @(posedge clk, negedge rstn)
   if (!rstn)
       cnt <= 0;
   else
       cnt <= cnt+1;
assign out = result[cnt];