我正在使用连接到Digilent FPGA的Pmod_KYPD。
我的目的是在键盘上输入组合'123‘后,激活电路板上的第一个LED。
我已经从Digilent下载了键盘的demo code,它工作得很好,基本上可以在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根本不会被激活。
我应该在我的修改中修改什么?
谢谢。:)
发布于 2013-05-15 23:57:04
您需要一个保持当前状态的条件。示例:
2'b01: begin
if(DispVal == 2) begin
state <= state + 1;
end
else if(DispVal == 1)
state <= state; // keep current state
else
state <= 0;
//led <= 8'b00000010;
end
注意:这是假设DispVal
是粘性的(即,它保持它的值,直到按下不同的键)。如果不是,则添加逻辑或状态来处理无按键条件。
调试建议:如果您没有模拟器,则在状态机中取消注释已注释掉的led <=
。这将允许监视状态顺序
https://stackoverflow.com/questions/16549841
复制相似问题