声明:本博客仅供学习参考,请勿作出直接抄袭等违反学术诚信的行为
实验环境
- 软件:Vivado 2020.2
- 硬件:Nexys A7-100T开发板
本门课程的实验环境似乎有两种,代码逻辑可能有所不同,请自行注意
实验主要目标
- 结合键盘模块,按键逻辑正常
- 屏幕有显示
- 在前面的基础上,实现删除、退格、清屏等进阶操作
- 输入特殊字符串,按下回车后显示对应自定义内容
个人思路与实现
前言
首先本次实验附件实现的内容是正确的,不需要你改动,即vgadraw、vgactrl、vgasim的逻辑没有问题,不需要你更改。vgactrl中的参数建议改成640*480比例的,后面实验会方便一点。参数更改如下:- parameter H_Sync_Width = 96;
- parameter H_Back_Porche = 48;
- parameter H_Active_Pixels = 640;
- parameter H_Front_Porch = 16;
- parameter H_Totals = 800;
- parameter V_Sync_Width = 2;
- parameter V_Back_Porche = 33;
- parameter V_Active_Pixels = 480;
- parameter V_Front_Porch = 10;
- parameter V_Totals = 525;
复制代码 总览
然后我们先梳理一下给出的实验文件结构:.coe文件都是静态图像部分的,scancode文件是键盘部分的,clkgen文件是生成时钟的模块(我没有使用),ASC16是字模文件,vgactrl负责生成同步信号和x轴y轴位置,vgadraw是一个函数,根据vgactrl部分的x轴y轴信息生成颜色信号,vgasim模块将vgactrl和vgadraw实例化,然后整理后统一输出VGA的各种信息
梳理完再看实验要求,我们要实现键盘和屏幕的交互,还要实现简单的伪终端行为,还要实现伪应用功能切换显示动态图片/静态图片/文字。所以我们的设计思路如下:以xterm为主文件,和屏幕键盘交互;先更改移植之前的键盘模块,使之能正常输出信号;然后设计实现伪终端界面,包括键盘信号译码、按字母取字模、按字模信号在屏幕上对应位置显示黑白像素等基础操作,以及按下del键、回车键、方向键等的进阶逻辑;然后设计动态图像模块、静态图像模块、文字模块,将其在xterm中实例化,并设计状态机实现终端到这些模块再回到终端的转换
键盘模块
这个前面的实验实现过了,所以没什么好说的,我的实现如下
[code] module kbd( input fastclk, input PS2_CLK, input PS2_DATA, output val, output [7:0] ascii, output [7:0] ctl, output c50hz ); reg [7:0] kb_mem[255:0]; initial begin $readmemh("?/scancode.txt", kb_mem, 0, 255); end reg [20:0]clk_dis = 0; reg clk_50hz = 0; always @(posedge fastclk) begin //100mhz if (clk_dis >= 1000000) begin //50hz clk_dis |