-5

Verilog は初めてで、4 ビットのバイナリ乱数ジェネレーターを作成しようとしています。プログラムは次のとおりです。エラーについて言及して誰か助けてもらえますか?

私は最初にこれを試しました:

module rng (d);
 inout[3:0]d;
 //wire[3:0]d;
 //input clk, rst;
 //wire [3:0] w;

 dff f1(a[0],clk,d[0],rst);
 dff f2(a[1],clk,d[1],rst);
 dff f3(a[2],clk,d[2],rst);
 dff f4(a[3],clk,d[3],rst);

 xorper p(d[0],d[1],d[2],d[3],a[0],a[1],a[2],a[3]);//permutations
 //dff f1(a,clk,q,rst);
 dff x(d,clk,q,rst);
endmodule

私もこれを試しました:

module re(b,q,clk,rst);
 input [3:0]q;
 input clk,rst;
 wire [3:0]q,a;

 output [3:0]b;
 reg [3:0]b;


 rox f1(q[0],q[1],q[2],q[3],a[0],a[1],a[2],a[3]);//permutations
 rod f2(a,clk,b,rst);//dff
 always@(posedge clk) begin
 if (rst==1'b0) begin
  b[0]=q[0];
  b[1]=q[1];
  b[2]=q[2];
  b[3]=q[3];
 end else if(rst==1'b1)
  b[0]=1'bx;
  b[1]=1'bx;
  b[2]=1'bx;
  b[3]=1'bx;
 end

endmodule
4

1 に答える 1

2

乱数生成にはLFSRから始めることをお勧めします。これらは単純なシフト レジスタであり、マルチビット XOR にタップしてフィードバック ビットを作成します。

フロップの実装はもっと良いかもしれません。
1) negedge rst をセンシティビティ リストに追加する
2) x を割り当てたくない
3) ノンブロッキング割り当て (<=) を使用する

reg [3:0] b;

//LFSR feedback bit
wire feedback
assign feedback = b[0] ^ b[3];

// Add active low reset to sensitivity list
always@(posedge clk or negedge rst) begin
 if (rst==1'b0) begin
  b[3:0]<=4'hF;  //reset condition first
 end 
 else begin
  b[0]<=feedback;
  b[1]<=b[0];
  b[2]<=b[1];
  b[3]<=b[2];
  //Alternative Verilog might be
  // b = {b[2:0], feedback};
 end

最大長 LFSRの LFSR 検索のタップ ポイントを選択するため。最大 LFSR は、指定された長さのレジスタとタップ ポイントを繰り返す前に、最も長い数列を持ちます。

于 2012-09-28T07:27:10.233 に答える