1

私はVerilogを初めて使用し、キーボードのキーが押されたときに何かを表示する最初のプログラムの1つを作成しようとしています。Verilogコースブックのサンプルコードを使用したいのですが、ピンの割り当てに問題があります(アルテラのDE2-70を使用しています)。

  1. input ReadKB;モジュール定義にこのようなものがないのに、なぜ私は持っているのですか?
  2. KBclkとKBdataにどのピンを割り当てる必要があるかを知っています。(PS2_KBCLK PIN_F24 PS/2 Clockおよび(PS2_KBDAT PIN_E24 PS/2 Data)ResetKBはどうですか?

教科書には説明がなく、とても興味があります。

コード:

module KeyboardInterface(KBclk, KBdata, ResetKB, SYNclk, ScanRdy, ScanCode, KeyReleased);
input KBclk;
input KBdata; 
input ResetKB;
input ReadKB;
input SYNclk;
output ScanRdy;
output ScanCode; 
output KeyReleased;

    //Generate an internal synchronized clock
    reg Clock;
    always @(posedge SYNclk) Clock = KBclk;

    reg[3:0] BitCount;
    reg StartBitDetected, ScanRdy;
    reg[7:0] ScanCode;


    //Count the number of serial bits and collect data into ScanCode
    always @(posedge Clock) begin
        if(ResetKB) begin
            BitCount=0; StartBitDetected =0;
        end else begin
            if(KBdata == 0 && StartBitDetected == 0) begin
                StartBitDetected=1;
                ScanRdy = 0;
            end else if (StartBitDetected) begin
                if(BitCount < 8) begin
                    BitCount = BitCount + 1;
                    ScanCode = {KBdata, ScanCode[7:1]};
                end else begin
                    StartBitDetected = 0;
                    BitCount = 0;
                    ScanRdy = 1;
                end
            end
        end
    end



    reg [1:0] CompletionState;
    wire KeyReleased;

        //keep track of the state of Scan Codes outputted
    always @(posedge SYNclk) begin
        if(ResetKB) CompletionState = 0;

        else case(CompletionState)
            0: if(ScanCode == 8'h70 && ScanRdy == 1) CompletionState =1;
                else CompletionState =0;
            1:  if(ScanRdy == 1) CompletionState =1;
                else CompletionState =2;
            2: if(ScanRdy == 0) CompletionState = 2;
                else CompletionState = 0;
            3: CompletionState = 0;
        endcase
    end

    assign KeyReleased = CompletionState == 3 ? 1 : 0; 

endmodule

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

4

2 に答える 2

1

これは単なる高レベルのリセット信号です。プッシュボタンで接続するだけで、プッシュボタンを使用してreg信号、ビットカウント、startbitdetectをリセットできます。

ただし、注意すべき重要な点の1つは、regシグナルはalwaysセクション内で「=」を使用できないことです。「<=」である必要があります。これは、より注意を払う必要があるブロッキング割り当てと非ブロッキング割り当ての違いです。幸運を。:-)

于 2013-01-12T02:43:24.320 に答える
1
  1. これはタイプミスのように見えます。先に進んで、不足しているワイヤをモジュール定義に追加してください。
  2. それがあなたが求めているものであるならば、おそらく実際にはあなたのキーボードから来る「リセット」はありません。利用可能な場合は、アルテラのプッシュボタンに接続するだけです。
于 2013-01-13T17:21:41.163 に答える