我正在使用连接到Digilent FPGA的Pmod_KYPD。
我的目的是在将组合“123”输入键盘后激活板上的第一个 LED。
我从 Digilent 下载了键盘的演示代码,它运行良好,它基本上显示了从键盘按下的任何内容到 7 段显示器。
演示代码由解码和显示两部分组成。我已经使用语句机修改了显示代码(只有第二个“always”语句是我添加的),如下所示:
`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 根本不会被激活。
我应该在修改中进行哪些更改?
谢谢。:)