1
我正在使用Pmod_KYPD連接到Digilent FPGA。[verilog]使用Pmod_KYPD組合激活LED
我的目的是在組合鍵'123'輸入到鍵盤後激活板上的第一個LED。
我已經下載從Digilent的鍵盤工作正常的demo code,它基本上顯示無論從鍵盤上按下到7段顯示。演示代碼由解碼和顯示兩部分組成。我已經修改了顯示代碼(僅第二「始終」語句是我加)像一個聲明機執行以下操作:
`timescale 1ns/1ps
//////////////////////////////////////////////////////////////////////////////////////////////////////////
// Company: Digilent Inc 2011
// Engineer: Michelle Yu
// Josh Sackos
// Create Date: 07/23/2012
//
// Module Name: DisplayController
// Project Name: PmodKYPD_Demo
// Target Devices: Nexys3
// Tool versions: Xilinx ISE 14.1
// Description: This file defines a DisplayController that controls the seven segment display that works with
// the output of the Decoder.
//
// Revision History:
// Revision 0.01 - File Created (Michelle Yu)
// Revision 0.02 - Converted from VHDL to Verilog (Josh Sackos)
//////////////////////////////////////////////////////////////////////////////////////////////////////////
// ==============================================================================================
// Define Module
// ==============================================================================================
module DisplayController(
DispVal,
anode,
segOut,
led,
clk,
reset
);
input clk;
input reset;
// ==============================================================================================
// Additional Declarations
// ==============================================================================================
output reg [7:0] led;
reg [1:0] state;
// ==============================================================================================
// Port Declarations
// ==============================================================================================
input [3:0] DispVal; // Output from the Decoder
output [3:0] anode; // Controls the display digits
output [6:0] segOut; // Controls which digit to display
// ==============================================================================================
// Parameters, Regsiters, and Wires
// ==============================================================================================
// Output wires and registers
wire [3:0] anode;
reg [6:0] segOut;
// ==============================================================================================
// Implementation
// ==============================================================================================
// only display the rightmost digit
assign anode = 4'b1110;
//------------------------------
// Segment Decoder
// Determines cathode pattern
// to display digit on SSD
//------------------------------
always @(DispVal) begin
case (DispVal)
4'h0 : segOut <= 7'b1000000; // 0
4'h1 : segOut <= 7'b1111001; // 1
4'h2 : segOut <= 7'b0100100; // 2
4'h3 : segOut <= 7'b0110000; // 3
4'h4 : segOut <= 7'b0011001; // 4
4'h5 : segOut <= 7'b0010010; // 5
4'h6 : segOut <= 7'b0000010; // 6
4'h7 : segOut <= 7'b1111000; // 7
4'h8 : segOut <= 7'b0000000; // 8
4'h9 : segOut <= 7'b0010000; // 9
4'hA : segOut <= 7'b0001000; // A
4'hB : segOut <= 7'b0000011; // B
4'hC : segOut <= 7'b1000110; // C
4'hD : segOut <= 7'b0100001; // D
4'hE : segOut <= 7'b0000110; // E
4'hF : segOut <= 7'b0001110; // F
default : segOut <= 7'b0111111;
endcase
end
always @(posedge clk) begin
if(reset) begin
led <= 8'b11111111;
state <= 0;
end
else begin
case (state)
2'b00: begin
if(DispVal == 1) begin
state <= state + 1;
end
//led <= 8'b10000000;
end
2'b01: begin
if(DispVal == 2) begin
state <= state + 1;
end
else
state <= 0;
//led <= 8'b00000010;
end
2'b10: begin
if(DispVal == 3) begin
state <= state + 1;
end
else
state <= 0;
//led <= 8'b00000100;
end
2'b11: begin
led <= 8'b11111111;
end
default: led <= 0;
endcase
end
end
endmodule
但我的修改,也很遺憾工作。如果我從鍵盤輸入'123',則LED不會被激活。
我在修改中應該更改哪些內容?
謝謝。 :)
非常感謝格雷格。那正是我所期待的。 :) – 2013-05-16 12:37:37