1
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バレルローテーターを作ろうと思っています。しかし、シフト値によって結果が変わらないのは、私が強調している部分に問題があると思います。アドバイスをください

4

1 に答える 1

3

outとして定義する必要があります。output現在はinputです。一部のシミュレーター/fpgas は、ポートの方向の適用に関して非常に厳密である場合があり、ほとんどの場合、警告が表示されます。

rb参考までに、 、rcおよびの割り当てにバグがありrdます。それらは参照しており、それぞれ、 、およびinを使用する必要があります。rarbrc

作業固定例: http://www.edaplayground.com/s/6/332

于 2013-11-05T19:39:02.500 に答える