西北工业大学 电子信息学院 08021103班
计算器部分:
计算器程序分为四个模块,其中一个模块为顶层模块,通过实例化其他三个模块来实现电路的功能。四个模块分别是PS2键盘输入及四则运算、数码管显示、VGA输出、顶层结合模块。
PS2 键盘 输入 及 四则 运算
运算结果分位 数码管显示 VGA输出 四、 单元电路设计与参数计算
a)学号显示:
module xuehao (jpsr,clk_in,sml0,sml1,sml2,sml3,switch); input [31:0] jpsr; //键盘输入运算数字的存储 inout switch; //功能切换的开关 input clk_in; //时钟信号
output [7:0] sml0,sml1,sml2,sml3; //数码管输出寄存
- 6 -
西北工业大学 电子信息学院 08021103班
b)计算器
1、键盘输入数字及四则运算:
module Verilog1(clk2,rst_n,ps2k_clk,ps2k_data,ps2_byte,ps2_state,sm_db,buff,clk3); input clk2; //50M时钟信号 input rst_n; //复位信号 input ps2k_clk; //PS2接口时钟信号 input ps2k_data; //PS2接口数据信号 output clk3; //25MHz时钟信号 output [15:0] buff; //计算结果寄存
output[31:0] sm_db; //7段数码管寄存器
output[7:0] ps2_byte; // 1byte键值,只做简单的按键扫描 output ps2_state; //键盘当前状态,ps2_state=1表示有键被按下
2、运算结果分位:
module sy3(sml,smlq,smlb,smls,smlg); input [15:0] sml; //四则运算结果
output [15:0] smlq,smlb,smls,smlg; //分位存储运算结果
- 7 -
西北工业大学 电子信息学院 08021103班
3、VGA显示:
module vga( sml000,sml111,sml222,sml333,clk , rst_n, hsync,vsync,vga_r,vga_g,vga_b); input [15:0] sml000,sml111,sml222,sml333; input clk; //50MHz input rst_n; //低电平复位 output hsync; //行同步信号 output vsync;
//颜色信号线RGB output vga_r; output vga_g; output vga_b;
- 8 -
西北工业大学 电子信息学院 08021103班
4、顶层模块:
module
top(clk,clk2,rst_n,ps2k_clk,ps2k_data,sml0,sml1,sml2,sml3,hsync,vsync,vga_r,vga_g,vga_b,switch) input clk2,clk; //50M时钟信号 input rst_n; //复位信号 input ps2k_clk; //PS2接口时钟信号 input ps2k_data; //PS2接口数据信号 input switch; //功能切换的开关
output[7:0] sml0,sml1,sml2,sml3; //数码管输出寄存 output hsync; //行同步信号 output vsync; //场同步信号 //颜色信号线RGB output vga_r; output vga_g; output vga_b; wire clk3; wire [15:0] buff;
wire [3:0] smlq,smlb,smls,smlg; wire [31:0] sm_db;
xuehao xuehao ( .switch(switch), .jpsr(sm_db), .clk_in(clk3), .sml0(sml0), .sml1(sml1), .sml2(sml2), .sml3(sml3) );
Verilog1 Verilog1( .clk2(clk2), .clk3(clk3), .rst_n(rst_n),
.ps2k_clk(ps2k_clk), .ps2k_data(ps2k_data), .ps2_byte(ps2_byte), .ps2_state(ps2_state), .sm_db(sm_db), .buff(buff) ); sy3 sy3(.sml(buff), .smlq(smlq), .smlb(smlb), .smls(smls), .smlg(smlg) );
vga vga( .clk(clk) ,
- 9 -
西北工业大学 电子信息学院 08021103班
.sml000(smlq), .sml111(smlb), .sml222(smls),
.sml333(smlg), .rst_n(rst_n), .hsync(hsync), .vsync(vsync), .vga_r(vga_r), .vga_g(vga_g), .vga_b(vga_b) ); endmodule
计算器总框图:
五、遇到问题的解决方法
1. 从未接触过Verilog HDL语言,对于开发板编程一窍不通。通过学习查阅资料,了解了这门语言的基本概念,再经过实际操作演练,熟悉了编程的流程。现在已经可以看懂实例并运用开发。
2. 在调试程序时,很多次运行成功但是无法得到应有的结果,检查程序发现,寄存变量的位数经常不匹配,导致无法得到正确结果。
- 10 -