
目标:从上位机输入命令,实现数据的输入来控制IO输出,输出要求可周期性变化(200M)、持续单一输出。掉电重新上电之前的数据不丢失。
解决方案:利用uart模块串口通信实现数据的传入,解析传入的命令,驱动i2c模块。I2C模块根据驱动信号,对EEPROM进行读写操作。IO16模块进行简单的译码,上位机传入的是4个字符,根据传入的字符进行译码,决定每一bit的IO管脚输出信号;举个例子,传入字符a,FPGA收到对应的ASCII码为61,将61解码为4’b1010(4’ha),对应的引脚就是1010电平信号;
优化:现在写代码就是能用就行,这里把uart模块里面的reg独立出来会好些,整个流程就是uart获取上位机的命名并解析,然后配置flag_input/error/num/loops/single寄存器信息,以及对于eep2num、num2eep寄存器的读写操作。这里是直接FPGA上板验证,可以独立出reg来练习一个UVM验证。
代码:链接:https://pan.baidu.com/s/1Yl4KztDAzMo9m4sxDQY1pQ?pwd=d4op
提取码:d4op
命令格式:
输入命令 | 说明 | |
① | cmdclear; | 所有IO输出为0(注意有分号) |
② | cmdloops; | 循环输出 |
③ | cmdsingl; | 稳定输出 |
④ | cmdinput; | 输入IO控制数据 |
⑤ | num****; | **代表需要存入到EEPROM中的控制数据 |
输入num1234;
具体展示:
①cmdclear;
输入cmdclear;会提示all pins are 0;。ILA采样的io[7:0]的信号为0,输出正确。

②cmdloops;
输入命令cmdloops;会提示正在循环的数据,ILA采样结果为88,66循环显示,输出正确。8866是之前存进eeprom的数据;

③cmdsingl;
输入cmdsingl;命令,会提示正在显示的数据为88,ILA采样结果显示稳定输出88,功能正确。

④cmdinput;
输入命令cmdinput;会提示please input number:。接下来输入num****m命令即可。

⑤num****;
输入num9876,会提示input successfully;这一步是更新了eeprom里面的值。需要在用cmdloops;或者cmdsingl;命令读取eeprom里面的值到相关存储寄存器。可以看到更新后循环显示。
