2017-06-30 16 views
-1

バイナリカウントの代わりにFirstname(スペース)Lastname(スペース)を文字単位で生成するパターンジェネレータとして、Verilogコードで順序回路をプログラムする必要があります。パターンシーケンスを少なくとも2サイクル表示する必要があります。パターンジェネレータ(Verilog)

diagram

これは、サンプル出力です: sampleoutput

私は私のプログラムが持っている問題はCoderModモジュールであるが、私は問題がどこにあるかわからないことを知っています。

ありがとうございました!

//pattern.v 

module TestMod; 
    reg CLK; 
    wire [0:11] Q; 
    wire [6:0] ascii; 
    initial begin 
     #1; 
     forever begin 
     CLK=0; 
     #1; 
     CLK=1; 
     #1; 
     end 

    end 

    RippleMod my_ripple(CLK, Q); 
    CoderMod my_coder(Q, ascii); 
    initial #27 $finish; 
    initial begin 
     $display("Time CLK Q      Name"); 
     $monitor("%4d %b %b %c %x %b", $time, CLK, Q, ascii, ascii, ascii); 
    end 
endmodule 

module CoderMod(Q, ascii); 
    input [0:13]Q; 
    output [13:0] ascii; 
    assign ascii[0] = "F"; 
    assign ascii[1] = "i"; 
    assign ascii[2] = "r"; 
    assign ascii[3] = "s"; 
    assign ascii[4] = "t"; 
    assign ascii[5] = " "; 
    assign ascii[6] = "L"; 
    assign ascii[7] = "a"; 
    assign ascii[8] = "s"; 
    assign ascii[9] = "t"; 
    assign ascii[10] = "n"; 
    assign ascii[11] = "a"; 
    assign ascii[12] = "m"; 
    assign ascii[13] = "e"; 

    or(ascii[0], Q[13]); 
    or(ascii[1], Q[12]); 
    or(ascii[2], Q[11]); 
    or(ascii[3], Q[10]); 
    or(ascii[4], Q[9]); 
    or(ascii[5], Q[8]); 
    or(ascii[6], Q[7]); 
    or(ascii[7], Q[6]); 
    or(ascii[8], Q[5]); 
    or(ascii[9], Q[4]); 
    or(ascii[10], Q[3]); 
    or(ascii[11], Q[2]); 
    or(ascii[12], Q[1]); 
    or(ascii[13], Q[0]); 

endmodule 

module RippleMod(CLK, Q); 
    input CLK; 
    output [0:15]Q; 
    reg [0:15]Q; 
    always @(posedge CLK) begin 
     Q[0] <= Q[15]; 
     Q[1] <= Q[0]; 
     Q[2] <= Q[1]; 
     Q[3] <= Q[2]; 
     Q[4] <= Q[3]; 
     Q[5] <= Q[4]; 
     Q[6] <= Q[5]; 
     Q[7] <= Q[6]; 
     Q[8] <= Q[7]; 
     Q[9] <= Q[8]; 
     Q[10] <= Q[9]; 
     Q[11] <= Q[10]; 
     Q[12] <= Q[11]; 
     Q[13] <= Q[12]; 
     Q[14] <= Q[13]; 
     Q[15] <= Q[14]; 
    end 

    initial begin 
     Q[0] = 1; 
     Q[1] = 0; 
     Q[2] = 0; 
     Q[3] = 0; 
     Q[4] = 0; 
     Q[5] = 0; 
     Q[6] = 0; 
     Q[7] = 0; 
     Q[8] = 0; 
     Q[9] = 0; 
     Q[10] = 0; 
     Q[11] = 0; 
     Q[12] = 0; 
     Q[13] = 0; 
     Q[14] = 0; 
     Q[15] = 0; 
    end 
endmodule 
+0

なぜ 'Q 'の範囲は' [0:11] '、' [0:13] '、' [0:15] 'と定義されていますか?なぜ8ビットの値を 'ascii'のインデックスの1ビットに割り当てるのですか?そしてなぜあなたは 'ascii 'の各ビットを2回(' assign'と 'or')割り当てていますか? – Greg

答えて

0

実際には、プログラムに複数の問題があります。 ascii[1] = "i";

:あなたがここにも同様に、1ビットのASCIIに8ビット文字をassigつまり、あなたはwire [6:0] ascii;としてアスキーarrayaを宣言したが、後であなたはそれが幅14の出力ポートであるCoderMod my_coder(Q, ascii);としてモジュールに接続しますヒントとして、あなたはそれを宣言する必要があります

wire [6:0] ascii [13:0]; 

あなたが残りの部分を把握することができます。