verilog 16b桶循环移位为什么不';不行? 模块旋转器(移位、左后、进、出); 输入[3:0]档; 在中输入[15:0]; 输入[15:0]输出; 输入lr; 导线[15:0]la、ra、lb、rb、lc、rc、ld、rd; //左移:2^n 分配la=移位[0]?{in[14:0],in[15]}:in//8. 分配出=lr?ld:rd; 端模

verilog 16b桶循环移位为什么不';不行? 模块旋转器(移位、左后、进、出); 输入[3:0]档; 在中输入[15:0]; 输入[15:0]输出; 输入lr; 导线[15:0]la、ra、lb、rb、lc、rc、ld、rd; //左移:2^n 分配la=移位[0]?{in[14:0],in[15]}:in//8. 分配出=lr?ld:rd; 端模,verilog,xilinx,Verilog,Xilinx,我正在努力制造16b桶旋转器。但结果不随位移值的变化而变化 我想我强调的部分是一个问题。请给我建议输出需要定义为输出,当前位于输入。一些模拟器/FPGA对端口方向的强制执行非常严格,大多数会发出警告 仅供参考,rb、rc和rd的分配中存在错误。它们在中引用了,应该分别使用ra、rb和rc 正在工作的修复示例:out已声明为输入。您可以添加输出和预期输出和/或添加简单的testharness。在我简单的上下转换测试中,它是有效的。 module Rotator(shift,lr,in,out);

我正在努力制造16b桶旋转器。但结果不随位移值的变化而变化
我想我强调的部分是一个问题。请给我建议

输出
需要定义为
输出
,当前位于
输入
。一些模拟器/FPGA对端口方向的强制执行非常严格,大多数会发出警告

仅供参考,
rb
rc
rd
的分配中存在错误。它们在中引用了
,应该分别使用
ra
rb
rc


正在工作的修复示例:

out已声明为输入。您可以添加输出和预期输出和/或添加简单的testharness。在我简单的上下转换测试中,它是有效的。
module Rotator(shift,lr,in,out);

input [3:0]  shift;
input [15:0] in;
input   [15:0] out;
input lr;

wire [15:0] la, ra, lb,rb, lc,rc, ld,rd;

//left shift:2^n

assign la = shift[0] ? { in[14:0],in[15]} : in; //<<1
assign lb = shift[1] ? { la[13:0],la[15:14]} : la; //<<2
assign lc = shift[2] ? { lb[11:0],lb[15:12]}: lb; //<<4
assign ld = shift[3] ? { lc[7:0], lc[15:8]}:lc; //<<8

//right shift:2^n

assign ra = shift[0]? { in[0], in[15:1]}: in;  //>>1
assign rb = shift[1]? { ra[1:0], in[15:2]}: ra; //>>2
assign rc = shift[2]? { rb[3:0], in[15:4]}: rb; //>>4
assign rd = shift[3]? { rc[7:0], in[15:8]}:rc; //>>8

assign out = lr? ld : rd;

endmodule