RS485接口收发测试FPGA读写实验Verilog逻辑源码Quartus工程文件+文档说明资料,FPGA为CYCLONE4系列中的EP4CE6E22C8. 完整的工程文件,可以做为你的学习设计参考。 实验任务和现象 任务:使用两块开发板,一块用作发送,一块用作接收。通过4个按键改变数据,并用LED将发送和接收的数据显示出来。 现象:两块开发板LED显示的效果一样,并且按下不同的按键,可以改变LED的显示,同时接收的板子接到数据后改变LED显示。 •5、设计思路 我们依旧采用串口的设计思路,设计程序,但因为 MAX485是半双工器件,所以需要接收和发送状态切换,有两个时能端,我们的开发板,将两个接到一起用一个引脚控制。 我们以串口发送为例: 以波特率9600为例子说明,波特率9600接收一个bit的时间为1s/9600=104us,即每隔104us发送一个数据。 module RS485_Revc ( input sys_clk , input sys_rst_n , input RO , output wire RE_DE , output reg [7:0] LED ); /***************reg define****************/ reg [7:0] buff ; reg [7:0] data_out ; reg [15:0] counter ; reg rxd_din1 ; //uart rxd input ; reg rxd_din2 ; //uart rxd input ; reg rxd_negedge_sig_flag ; /***************wire define***************/ wire rxd_negedge_sig ; /******************************************************************************************************* ** Main Program ** ********************************************************************************************************/ assign RE_DE = 1'b0; always @ (posedge sys_clk or negedge sys_rst_n) begin if ( sys_rst_n ==1'b0 ) begin rxd_din1 <= 1'b0; rxd_din2 <= 1'b0; end else begin rxd_din1 <= RO ; rxd_din2 <= rxd_din1; end end assign rxd_negedge_sig = (~rxd_din2) &(rxd_din1); always @ (posedge sys_clk or negedge sys_rst_n) begin if ( sys_rst_n ==1'b0) rxd_negedge_sig_flag <= 1'b0; else rxd_negedge_sig_flag <= rxd_negedge_sig; end always @ (posedge s
Verilog HDL设计数码管动态扫面显示的FPGA设计Quartus工程文件,FPGA型号Cyclone4E系列中的EP4CE10F17C8,Quartus版本18.0。 module top_seg_led( //global clock input sys_clk , // 全局时钟信号 input sys_rst_n, // 复位信号(低有效) //seg_led interface output [5:0] seg_sel , // 数码管位选信号 output [7:0] seg_led // 数码管段选信号 ); //wire define wire [19:0] data; // 数码管显示的数值 wire [ 5:0] point; // 数码管小数点的位置 wire en; // 数码管显示使能信号 wire sign; // 数码管显示数据的符号位 //***************************************************** //** main code //***************************************************** //计数器模块,产生数码管需要显示的数据 count u_count( .clk (sys_clk ), // 时钟信号 .rst_n (sys_rst_n), // 复位信号 .data (data ), // 6位数码管要显示的数值 .point (point ), // 小数点具体显示的位置,高电平有效 .en (en ), // 数码管使能信号 .sign (sign ) // 符号位 ); //数码管动态显示模块 seg_led u_seg_led( .clk (sys_clk ), // 时钟信号 .rst_n (sys_rst_n), // 复位信号 .data (data ), // 显示的数值 .point (point ), // 小数点具体显示的位置,高电平有效 .en (en ), // 数码管使能信号 .sign (sign ), // 符号位,高电平显示负号(-) .seg_sel (seg_sel ), // 位选 .seg_led (seg_led ) // 段选 ); endmodule
Verilog HDL设计信号频率测量模块FPGA设计Quartus工程文件 ,等精度频率计模块,测量被测信号频率,FPGA型号Cyclone4E系列中的EP4CE10F17C8,Quartus版本18.0。 module top_cymometer( //system clock input sys_clk , // 时钟信号 input sys_rst_n, // 复位信号 //cymometer interface input clk_fx , // 被测时钟 output clk_out , // 输出时钟 //user interface output [5:0] sel , // 数码管位选 output [7:0] seg_led // 数码管段选 ); //parameter define parameter CLK_FS = 26'd50000000; // 基准时钟频率值 //wire define wire [19:0] data_fx; // 被测信号测量值 //***************************************************** //** main code //***************************************************** //例化PLL,生成待测试时钟500Khz test_pll test_pll_inst ( .inclk0 (sys_clk ), .c0 (clk_out ) ); //例化等精度频率计模块 cymometer #(.CLK_FS(CLK_FS) // 基准时钟频率值 ) u_cymometer( //system clock .clk_fs (sys_clk ), // 基准时钟信号 .rst_n (sys_rst_n), // 复位信号 //cymometer interface .clk_fx (clk_fx ), // 被测时钟信号 .data_fx (data_fx ) // 被测时钟频率输出 ); //例化数码管显示模块 seg_led u_seg_led( //module clock .clk (sys_clk ), // 数码管驱动模块的驱动时钟 .rst_n (sys_rst_n), // 复位信号 //seg_led interface .seg_sel (sel ), // 数码管位选 .seg_led (seg_led ), // 数码管段选 //user interface .data (data_fx ), // 被测频率值 .point (6'd0 ), // 数码管显示的点控制 .en (1'b1 ), // 数码管驱动使能信号 .sign (1'b0 ) // 控制符号位显示 ); endmodule