我需要做一个设计来对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,我的头疼。
答案 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];