UART_I2C_EEPROM

目标:从上位机输入命令,实现数据的输入来控制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里面的值到相关存储寄存器。可以看到更新后循环显示。


版权声明:本文为cxis0原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。