实验内容
- 按键控制,按下ADC采集数据100次,并存储到FIFO中
- 从FIFO中读取数据,并通过UART发送数据到PC
实验工具
Quartus ii 18.0
AC620 FPGA
原理图
如上图所示,红线的地方是输入输出端口
start模块:控制ADC开始采样100次
ADC_driver模块:驱动ADC128S052模块进行模数转换
FIFO模块: 存储/读取ADC的100个数据
FSM模块:控制FIFO的读取以及Uart_tx模块的数据发送
Uart_tx模块:通过串口调试助手,发送数据到PC中
VHDL code
ADC模块VHDL代码实现
Uart_tx模块VHDL代码实现
上面两个模块都已经详细讲过,不再赘述。
start 模块
实现功能:
- 对输入的key_in进行按键消抖,同时也防止按键时间过长,导致ADC采集超过100次
- 控制ADC采集100次数据
按键消抖
keyin<= key_flag and ( not key_state);
key_state是按键的状态,key_flag代表到检测到稳定的上升沿/下降沿。
所以当我们botton按下的时候,key_state = 1, key_flag=1,此时形成一个高脉冲信号。
100次数据
ADC_start为ADC的使能信号,当按键按下,ADC的使能信号一直拉高,ADC采样计数信号清零;
当FIFO满了,或者采样100次之后,ADC_start拉低,ADC停止采样
------------------启动ADC采样100次--------------------
process(clk)
begin
if(nrst = '0') then
ADC_start <= '0';<