FPGA读写 SDRAM Verilog设计源码Quartus工程文件,SDRAM型号FW9825G6KH-6,SDRAM读写测试: 向SDRAM中写入数据,然后将数据读出,并判断读出的数据是否正确,FPGA型号Cyclone4E系列中的EP4CE10F17C8,Quartus版本18.0。 module sdram_rw_test( input clk, //FPGA外部时钟,50M input rst_n, //按键复位,低电平有效 //SDRAM 芯片接口 output sdram_clk, //SDRAM 芯片时钟 output sdram_cke, //SDRAM 时钟有效 output sdram_cs_n, //SDRAM 片选 output sdram_ras_n, //SDRAM 行有效 output sdram_cas_n, //SDRAM 列有效 output sdram_we_n, //SDRAM 写有效 output [ 1:0] sdram_ba, //SDRAM Bank地址 output [12:0] sdram_addr, //SDRAM 行/列地址 inout [15:0] sdram_data, //SDRAM 数据 output [ 1:0] sdram_dqm, //SDRAM 数据掩码 //LED output led //状态指示灯 ); //wire define wire clk_50m; //SDRAM 读写测试时钟 wire clk_100m; //SDRAM 控制器时钟 wire clk_100m_shift; //相位偏移时钟 wire wr_en; //SDRAM 写端口:写使能 wire [15:0] wr_data; //SDRAM 写端口:写入的数据 wire rd_en; //SDRAM 读端口:读使能 wire [15:0] rd_data; //SDRAM 读端口:读出的数据 wire sdram_init_done; //SDRAM 初始化完成信号 wire locked; //PLL输出有效标志 wire sys_rst_n; //系统复位信号 wire error_flag; //读写测试错误标志 //***************************************************** //** main code //***************************************************** //待PLL输出稳定之后,停止系统复位 assign sys_rst_n = rst_n & locked; //例化PLL, 产生各模块所需要的时钟 pll_clk u_pll_clk( .inclk0 (clk), .areset (~rst_n), .c0 (clk_50m), .c1 (clk_100m), .c2
AD(AD9280)和DA(AD9708) FPGA读写Verilog设计源码Quartus工程文件,AD芯片选用AD9280,DA芯片选用AD9708,,FPGA型号Cyclone4E系列中的EP4CE10F17C8,Quartus版本18.0。 module hs_ad_da( input sys_clk , //系统时钟 input sys_rst_n , //系统复位,低电平有效 //DA芯片接口 output da_clk , //DA(AD9708)驱动时钟,最大支持125Mhz时钟 output [7:0] da_data , //输出给DA的数据 //AD芯片接口 input [7:0] ad_data , //AD输入数据 //模拟输入电压超出量程标志(本次试验未用到) input ad_otr , //0:在量程范围 1:超出量程 output ad_clk //AD(AD9280)驱动时钟,最大支持32Mhz时钟 ); //wire define wire [7:0] rd_addr; //ROM读地址 wire [7:0] rd_data; //ROM读出的数据 //***************************************************** //** main code //***************************************************** //DA数据发送 da_wave_send u_da_wave_send( .clk (sys_clk), .rst_n (sys_rst_n), .rd_data (rd_data), .rd_addr (rd_addr), .da_clk (da_clk), .da_data (da_data) ); //ROM存储波形 rom_256x8b u_rom_256x8b( .address (rd_addr), .clock (sys_clk), .q (rd_data) ); //AD数据接收 ad_wave_rec u_ad_wave_rec( .clk (sys_clk), .rst_n (sys_rst_n), .ad_data (ad_data), .ad_otr (ad_otr), .ad_clk (ad_clk) ); endmodule
FPGA设计交通信号灯演示逻辑Verilog设计源码Quartus工程文件,FPGA型号Cyclone4E系列中的EP4CE10F17C8,Quartus版本18.0。 module top_traffic( input sys_clk , //系统时钟信号 input sys_rst_n , //系统复位信号 output [3:0] sel , //数码管位选信号 output [7:0] seg_led , //数码管段选信号 output [5:0] led //LED使能信号 ); //wire define wire [5:0] ew_time; //东西方向状态剩余时间数据 wire [5:0] sn_time; //南北方向状态剩余时间数据 wire [1:0] state ; //交通灯的状态,用于控制LED灯的点亮 //***************************************************** //** main code //***************************************************** //交通灯控制模块 traffic_light u0_traffic_light( .sys_clk (sys_clk), .sys_rst_n (sys_rst_n), .ew_time (ew_time), .sn_time (sn_time), .state (state) ); //数码管显示模块 seg_led u1_seg_led( .sys_clk (sys_clk) , .sys_rst_n (sys_rst_n), .ew_time (ew_time), .sn_time (sn_time), .en (1'b1), .sel (sel), .seg_led (seg_led) ); //led灯控制模块 led u2_led( .sys_clk (sys_clk ), .sys_rst_n (sys_rst_n), .state (state ), .led (led ) ); endmodule
温度传感器ds18b20读写Verilog驱动源码Quartus工程文件,FPGA型号Cyclone4E系列中的EP4CE10F17C8,Quartus版本18.0。 module temp_disp( input sys_clk , //输入的系统时钟 input sys_rst_n , //输入的复位信号 inout dq , //ds18b20温度传感器单总线 output [5:0] sel , //输出数码管位选信号 output [7:0] seg_led //输出数码管段选信号 ); //parameter define parameter POINT = 6'b000100; // 数码管小数点的位置 //wire define wire [19:0] temp_data; // 温度数值 wire sign; // 符号位 //***************************************************** //** main code //***************************************************** //例化动态数码管驱动模块 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 (temp_data), // 显示的数值 .point (POINT ), // 小数点具体显示的位置,从高到低,高电平有效 .en (1'b1 ), // 数码管使能信号 .sign (sign ) // 符号位(高电平显示“-”号) ); //例化DS18B20驱动模块 ds18b20_dri u1_ds18b20_dri( //module clock .clk (sys_clk ), // 时钟信号(50MHz) .rst_n (sys_rst_n), // 复位信号 //user interface .dq (dq ), // DS18B20的DQ引脚数据 .temp_data (temp_data), // 转换后得到的温度值 .sign (sign ) // 符号位 ); endmodule
温湿度传感器DHT11读写Verilog驱动源码Quartus工程文件,FPGA读取DHT11温度湿度数据并通过数码管显示输出,FPGA型号Cyclone4E系列中的EP4CE10F17C8,Quartus版本18.0。 module top_dht11( input sys_clk , //系统时钟 input sys_rst_n, //系统复位 inout dht11 , //DHT11总线 input key , //按键 output [5:0] sel , //数码管位选信号 output [7:0] seg_led //数码管段选信号 ); //wire define wire [31:0] data_valid; wire [19:0] data ; wire [5:0] point ; //***************************************************** //** main code //***************************************************** //dht11驱动模块 dht11_drive u_dht11_drive ( .sys_clk (sys_clk), .rst_n (sys_rst_n), .dht11 (dht11), .data_valid (data_valid) ); //按键消抖模块 key_debounce u_key_debounce( .sys_clk (sys_clk), .sys_rst_n (sys_rst_n), .key (key), .key_flag (key_flag), .key_value (key_value) ); //按键控制温/湿度显示 dht11_key u_dht11_key( .sys_clk (sys_clk), .sys_rst_n (sys_rst_n), .key_flag (key_flag), .key_value (key_value), .data_valid (data_valid), .data (data), .sign (sign), .en (en), .point (point) ); //动态数码管显示模块 seg_led u_seg_led ( .clk (sys_clk), .rst_n (sys_rst_n), .seg_sel (sel), .seg_led (seg_led), .data (data), .point (point), .en (en), .sign (sign) ); endmodule
E2PROM读写测试Verilog HDL设计Quartus工程文件,E2POM型号AT24C16,FPGA型号Cyclone4E系列中的EP4CE10F17C8,Quartus版本18.0。 module e2prom_top( input sys_clk , //系统时钟 input sys_rst_n , //系统复位 //eeprom interface output iic_scl , //eeprom的时钟线scl inout iic_sda , //eeprom的数据线sda //user interface output led //led显示 ); //parameter define parameter SLAVE_ADDR = 7'b1010000 ; //器件地址(SLAVE_ADDR) parameter BIT_CTRL = 1'b1 ; //字地址位控制参数(16b/8b) parameter CLK_FREQ = 26'd50_000_000; //i2c_dri模块的驱动时钟频率(CLK_FREQ) parameter I2C_FREQ = 18'd250_000 ; //I2C的SCL时钟频率 parameter L_TIME = 17'd125_000 ; //led闪烁时间参数 //wire define wire dri_clk ; //I2C操作时钟 wire i2c_exec ; //I2C触发控制 wire [15:0] i2c_addr ; //I2C操作地址 wire [ 7:0] i2c_data_w; //I2C写入的数据 wire i2c_done ; //I2C操作结束标志 wire i2c_ack ; //I2C应答标志 0:应答 1:未应答 wire i2c_rh_wl ; //I2C读写控制 wire [ 7:0] i2c_data_r; //I2C读出的数据 wire rw_done ; //E2PROM读写测试完成 wire rw_result ; //E2PROM读写测试结果 0:失败 1:成功 //***************************************************** //** main code //***************************************************** //e2prom读写测试模块 e2prom_rw u_e2prom_rw( .clk (dri_clk ), //时钟信号 .rst_n (sys_rst_n ), //复位信号 //i2c interface .i2c_exec (i2c_exec ), //I2C触发执行信号 .i2c_rh_wl (i2c_rh_wl ), //I2C读写控制信号 .i2c_addr (i2c_addr ), //I2C器件内地址 .i2c_data_w (i2c_data_w), //I2C要写的数据 .i2c_data_r (i2c_data_r), //I2C读出的数据 .i2c_done (i2c_done ), //I2C一次操作完成 .i2c_ack (i2c_ack ), //I2C应答标志 //user interface .rw_done (rw_done ), //E2PROM读写测试完成 .rw_result (rw_result ) //E2PROM读写测试结果 0:失败 1:成功 ); //i2c驱动模块 i2c_dri #( .SLAVE_ADDR (SLAVE_ADDR), //EEPROM从机地址 .CLK_FREQ (CLK_FREQ ), //模块输入的时钟频率
I2C接口距离传感器ap3216c读写Verilog驱动源码Quartus工程文件,FPGA型号Cyclone4E系列中的EP4CE10F17C8,Quartus版本18.0。 module ap3216c_top( //global clock input sys_clk , // 系统时钟 input sys_rst_n , // 系统复位 //ap3216c interface output ap_scl , // i2c时钟线 inout ap_sda , // i2c数据线 //user interface output [3:0] led , // led灯接口 output [5:0] sel , // 数码管位选 output [7:0] seg_led // 数码管段选 ); //parameter define parameter SLAVE_ADDR = 7'h1e ; // 器件地址 parameter BIT_CTRL = 1'b0 ; // 字地址位控制参数(16b/8b) parameter CLK_FREQ = 26'd50_000_000; // i2c_dri模块的驱动时钟频率(CLK_FREQ) parameter I2C_FREQ = 18'd250_000 ; // I2C的SCL时钟频率 //wire define wire clk ; // I2C操作时钟 wire i2c_exec ; // i2c触发控制 wire [15:0] i2c_addr ; // i2c操作地址 wire [ 7:0] i2c_data_w; // i2c写入的数据 wire i2c_done ; // i2c操作结束标志 wire i2c_ack ; // I2C应答标志 0:应答 1:未应答 wire i2c_rh_wl ; // i2c读写控制 wire [ 7:0] i2c_data_r; // i2c读出的数据 wire [15:0] als_data ; // ALS的数据 wire [ 9:0] ps_data ; // PS的数据 //***************************************************** //** main code //***************************************************** //例化i2c_dri,调用IIC协议 i2c_dri #( .SLAVE_ADDR (SLAVE_ADDR), // slave address从机地址,放此处方便参数传递 .CLK_FREQ (CLK_FREQ ), // i2c_dri模块的驱动时钟频率(CLK_FREQ) .I2C_FREQ (I2C_FREQ ) // I2C的SCL时钟频率 ) u_i2c_dri( //global clock .clk (sys_clk ), // i2c_dri模块的驱动时钟(CLK_FREQ) .rst_n (sys_rst_n ), // 复位信号 //i2c interface .i2c_exec
ALTERA FPGA IP SRAM应用DEMO双口RAM读写测试Verilog源码工程文件, FPGA型号EP4CE10F17C,Quartus版本18.0。 module ram_rw( input clk , //时钟信号 input rst_n , //复位信号,低电平有效 output ram_wr_en , //ram写使能 output ram_rd_en , //ram读使能 output reg [4:0] ram_addr , //ram读写地址 output reg [7:0] ram_wr_data, //ram写数据 input [7:0] ram_rd_data //ram读数据 ); //reg define reg [5:0] rw_cnt ; //读写控制计数器 //***************************************************** //** main code //***************************************************** //rw_cnt计数范围在0~31,ram_wr_en为高电平;32~63时,ram_wr_en为低电平 assign ram_wr_en = ((rw_cnt >= 6'd0) && (rw_cnt = 6'd32) && (rw_cnt <= 6'd63)) ? 1'b1 : 1'b0; //读写控制计数器,计数器范围0~63 always @(posedge clk or negedge rst_n) begin if(rst_n == 1'b0) rw_cnt <= 6'd0; else if(rw_cnt == 6'd63) rw_cnt <= 6'd0; else rw_cnt <= rw_cnt + 6'd1; end //读写控制器计数范围:0~31 产生ram写使能信号和写数据信号 always @(posedge clk or negedge rst_n) begin if(rst_n == 1'b0) ram_wr_data = 6'd0 && rw_cnt <= 6'd31) ram_wr_data <= ram_wr_data + 8'd1; else ram_wr_data <= 8'd0; end //读写地址信号 范围:0~31 always @(posedge clk or negedge rst_n) begin if(rst_n == 1'b0) ram_addr <= 5'd0; else if(ram_addr == 5'd31) ram_addr <= 5'd0; else ram_addr <= ram_addr + 1'b1; end endmodule
ALTERA FPGA IP FIFO 8bitX8 FIFO读写测试Verilog源码工程文件, FPGA型号Cyclone4E系列中的EP4CE10F17C8,Quartus版本18.0。 module ip_fifo( input sys_clk , // 时钟信号 input sys_rst_n // 复位信号 ); //wire define wire wrreq ; // 写请求信号 wire [7:0] data ; // 写入FIFO的数据 wire wrempty ; // 写侧空信号 wire wrfull ; // 写侧满信号 wire wrusedw ; // 写侧FIFO中的数据量 wire rdreq ; // 读请求信号 wire [7:0] q ; // 从FIFO输出的数据 wire rdempty ; // 读侧空信号 wire rdfull ; // 读侧满信号 wire rdusedw ; // 读侧FIFO中的数据量 //***************************************************** //** main code //***************************************************** //例化FIFO模块 fifo u_fifo( .wrclk ( sys_clk ), // 写时钟 .wrreq ( wrreq ), // 写请求 .data ( data ), // 写入FIFO的数据 .wrempty ( wrempty ), // 写空信号 .wrfull ( wrfull ), // 写满信号 .wrusedw ( wrusedw ), // 写侧数据量 .rdclk ( sys_clk ), // 读时钟 .rdreq ( rdreq ), // 读请求 .q ( q ), // 从FIFO输出的数据 .rdempty ( rdempty ), // 读空信号 .rdfull ( rdfull ), // 读满信号 .rdusedw ( rdusedw ) // 读侧数据量 ); //例化写FIFO模块 fifo_wr u_fifo_wr( .clk (sys_clk ), // 写时钟 .rst_n (sys_rst_n), // 复位信号 .wrreq (wrreq ), // 写请求 .data (data ), // 写入FIFO的数据 .wrempty (wrempty ), // 写空信号 .wrfull (wrfull ) // 写满信号 ); //例化读FIFO模块 fifo_rd u_fifo_rd( .clk (sys_clk ), // 读时钟 .rst_n (sys_rst_n), // 复位信号 .rdreq (rdreq ), // 读请求 .data (q ), // 从FIFO输出的数据 .rdempty (rdempty ), // 读空信号 .rdfull (rdfull ) // 读满信号 ); endmodule
Verilog HDL设计UART串口读写测试FPGA逻辑Quartus工程文件,通过串口接收PC发送的字符然后将收到的字符发送给PC,FPGA型号Cyclone4E系列中的EP4CE10F17C8,Quartus版本18.0。 module uart_top( input sys_clk, //外部50M时钟 input sys_rst_n, //外部复位信号,低有效 //uart接口 input uart_rxd, //UART接收端口 output uart_txd //UART发送端口 ); //parameter define parameter CLK_FREQ = 50000000; //定义系统时钟频率 parameter UART_BPS = 115200; //定义串口波特率 //wire define wire uart_en_w; //UART发送使能 wire [7:0] uart_data_w; //UART发送数据 wire clk_1m_w; //1MHz时钟,用于Signaltap调试 //***************************************************** //** main code //***************************************************** clk_div u_pll( //时钟分频模块,用于调试 .inclk0 (sys_clk), .c0 (clk_1m_w) ); uart_recv #( //串口接收模块 .CLK_FREQ (CLK_FREQ), //设置系统时钟频率 .UART_BPS (UART_BPS)) //设置串口接收波特率 u_uart_recv( .sys_clk (sys_clk), .sys_rst_n (sys_rst_n), .uart_rxd (uart_rxd), .uart_done (uart_en_w), .uart_data (uart_data_w) ); uart_send #( //串口发送模块 .CLK_FREQ (CLK_FREQ), //设置系统时钟频率 .UART_BPS (UART_BPS)) //设置串口发送波特率 u_uart_send( .sys_clk (sys_clk), .sys_rst_n (sys_rst_n), .uart_en (uart_en_w), .uart_din (uart_data_w), .uart_txd (uart_txd) ); endmodule