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
我想要制作16b桶式旋转器。但结果不随班次值而改变 我认为我强调的部分是问题。请给我建议
答案 0 :(得分:3)
out
需要定义为output
,目前位于input
。一些模拟器/ fpgas在强制执行端口方向时可能非常严格,大多数都会发出警告。
仅供参考,rb
,rc
和rd
的作业存在错误。他们引用in
,应分别使用ra
,rb
和rc
。