网站建设中 模板/网络推广都有哪些平台
FPGA 20 串口收发与存储双口RAM 简易应用系统设计
主要功能: FPGA 接收到数据后将数据存储在双口 ram 的一段连续空间中,当需要时,按下按键 Key_in,则 FPGA 将 RAM 中存储的数据通过串口发送出去. 另外,使用ROM 以后,即使系统复位,dprom中的数据仍然存在,而不会被清除.
实现(设计)流程:本实验属于系统设计,在基于之前的模块进行模块化设计上,调用了 key_filter、uart_tx、uart_rx、dpram的模块,新加入设计了ctrl 信号控制模块,最终实现,数据的接收和发送。
实验目的 : 使用fpga 的模块化开发流程。fpga系统设计的流程。系统框图设计流程.
在整个系统设计中,对信号控制模块的设计是我们现在所关注的问题:其它的模块在之前设计的时候就已经保证了其各个功能的正确性,同时也了解了改模块的功能及性质。我们要通过CTRL 子模块讲整个系统的信号进行连接和整合,实现系统的连接。
首先:
实现功能
① 通过uart_rx接收数据,存取在dprom中.
为了实现FPGA 接收到数据后将数据存储在双口 ram 的一段连续空间中, 这样就需要设计一个可以实现写地址数据自加的控制逻辑,且其控制信号为串口接收模块输出的 Rx_Done 信号。每来一个 Rx_Done 也就是每接收成功一字节数,地址数进行加一。
② 通过key_in 发送数据,将存dprom 的数据全部发送出去
当按下按键 0, FPGA 将 RAM 中存储的数据通过串口发送出去。 也就是实现按键按下即启动连续读操作,再次按下即可暂停读操 .同时控制uart_tx 将数据循环发送出去。
module CTRL(Clk,Rst_n,Key_flag,Key_state,Rx_Done,Tx_Done,rdaddress,wraddress,wren,Send_en);input Clk ;input Rst_n;input Key_flag;input Key_state;input Rx_Done;input Tx_Done;output reg [7:0]rdaddress;output reg [7:0]wraddress;output wren;output reg Send_en;reg do_send ; reg r0_send_done;reg r1_send_done ;assign wren = Rx_Done ;always@(posedge Clk or negedge Rst_n)if(!Rst_n)wraddress <= 8'd0 ;else if(Rx_Done)wraddress <= wraddress +1'b1 ;elsewraddress <= wraddress ;always@(posedge Clk or negedge Rst_n)if(!Rst_n)do_send <= 1'd0 ;else if(Key_flag && !Key_state) //do_send <= ~do_send ;always@(posedge Clk or negedge Rst_n)if(!Rst_n)rdaddress <= 8'd0 ;else if(do_send && Tx_Done)rdaddress <= rdaddress + 8'd1 ;elserdaddress <= rdaddress ;//2级寄存器,两个时钟周期延时always@(posedge Clk or negedge Rst_n)if(!Rst_n) beginr0_send_done <= 1'b0 ;r1_send_done <= 1'b0 ;endelse beginr0_send_done <=(Key_flag && !Key_state);r1_send_done <=(Key_flag && !Key_state);endalways@(posedge Clk or negedge Rst_n)if(!Rst_n)Send_en <= 1'b0 ;else if(Key_flag && !Key_state)Send_en <= 1'b1 ;else if(r1_send_done)Send_en <= 1'b1 ;elseSend_en <= 1'b0 ;endmodule