FPGA片内ROM读写测试Verilog逻辑源码Quartus工程文件+文档说明,ALTERA 在 Quartus 软件里为我们已经提供了 ROM 的 IP 核, 我们只需通过 IP 核例化一个 ROM, 根据 ROM 的读时序来读取 ROM 中存储的数据。实验中会通过 Quartus 集成的在线逻辑分析仪Signaltap,我们可以观察 ROM 的读时序和从 ROM 中读取的数据,FPGA型号Cyclone4E系列中的EP4CE6F17C8,Quartus版本17.1。 timescale 1ns / 1ps ////////////////////////////////////////////////////////////////////////////////// module rom_test( input clk, //50MHz时钟 input rst_n //复位信号,低电平有效 ); //----------------------------------------------------------- reg[4:0] rom_addr; //ROM输入地址 wire[7:0] rom_data; //ROM的数据 //产生ROM地址读取数据测试 always @(posedge clk or negedge rst_n) if(rst_n==1'b0) rom_addr <= 10'd0; else rom_addr <= rom_addr+1'b1; //----------------------------------------------------------- //实例化ROM rom_ip rom_ip_inst ( .clock (clk ), // input clock .address (rom_addr ), // input [4 : 0] address .q (rom_data ) // output [7 : 0] q ); endmodule
FPGA片内RAM读写测试Verilog逻辑源码Quartus工程文件+文档说明,使用 FPGA 内部的 RAM 以及程序对该 RAM 的数据读写操作,FPGA型号Cyclone4E系列中的EP4CE6F17C8,Quartus版本17.1。 `timescale 1ns / 1ps ////////////////////////////////////////////////////////////////////////////////// module ram_test( input clk, //50MHz时钟 input rst_n //复位信号,低电平有效 ); //----------------------------------------------------------- reg[8:0] w_addr; //RAM写地址 reg[15:0] w_data; //RAM写数据 reg wea; //RAM PORTA 使能 reg[8:0] r_addr; //RAM读地址 wire[15:0] r_data; //RAM读数据 //产生RAM地址读取数据测试 always @(posedge clk or negedge rst_n) if(rst_n==1'b0) r_addr <= 9'd0; else r_addr <= r_addr+1'b1; ///产生RAM写入的数据 always@(posedge clk or negedge rst_n) begin if(rst_n==1'b0) begin wea <= 1'b0; w_addr <= 9'd0; w_data <= 16'd0; end else begin if(w_addr==511) begin //ram写入完毕 wea <= 1'b0; end else begin wea<=1'b1; //ram写使能 w_addr <= w_addr + 1'b1; w_data <= w_data + 1'b1; end end end //----------------------------------------------------------- //实例化RAM ram_ip ram_ip_inst ( .wrclock (clk ), // input wrclock .wren (wea ), // input [0 : 0] wren .wraddress (w_addr ), // input [8 : 0] wraddress .data (w_data ), // input [15 : 0] data .rdclock (clk ), // input rdclock .rdaddress (r_addr ), // input [8 : 0] rdaddress .q (r_data ) // output [15 : 0] q ); endmodule
FPGA片内FIFO读写测试Verilog逻辑源码Quartus工程文件+文档说明,使用 FPGA 内部的 FIFO 以及程序对该 FIFO 的数据读写操作。FPGA型号Cyclone4E系列中的EP4CE6F17C8,Quartus版本17.1。 timescale 1ns / 1ps ////////////////////////////////////////////////////////////////////////////////// module fifo_test( input clk, //50MHz时钟 input rst_n //复位信号,低电平有效 ); //----------------------------------------------------------- localparam W_IDLE = 1; localparam W_FIFO = 2; localparam R_IDLE = 1; localparam R_FIFO = 2; reg[2:0] write_state; reg[2:0] next_write_state; reg[2:0] read_state; reg[2:0] next_read_state; reg[15:0] w_data; //FIFO写数据 wire wr_en; //FIFO写使能 wire rd_en; //FIFO读使能 wire[15:0] r_data; //FIFO读数据 wire full; //FIFO满信号 wire empty; //FIFO空信号 wire[8:0] rd_data_count; wire[8:0] wr_data_count; ///产生FIFO写入的数据 always@(posedge clk or negedge rst_n) begin if(rst_n == 1'b0) write_state <= W_IDLE; else write_state <= next_write_state; end always@(*) begin case(write_state) W_IDLE: if(empty == 1'b1) //FIFO空, 开始写FIFO next_write_state <= W_FIFO; else next_write_state <= W_IDLE; W_FIFO: if(full == 1'b1) //FIFO满 next_write_state <= W_IDLE; else next_write_state <= W_FIFO; default: next_write_state <= W_IDLE; endcase end assign wr_en = (next_write_state == W_FIFO) ? 1'b1 : 1'b0; always@(posedge clk or negedge rst_n) begin if(rst_n == 1'b0) w_data <= 16'd0; else if (wr_en == 1'b1) w_data <= w_data + 1'b1; else w_data <= 16'd0; end ///产生FIFO读的数据 always@(posedge clk or negedge rst_n) begin if(rst_n == 1'b0) read_state <= R_IDLE; else read_state <= next_read_state; end always@(*) begin case(read_state) R_IDLE: if(full == 1'b1) //FIFO满, 开始读FIFO next_read_state <= R_FIFO; else next_read_state <=
基于FPGA设计的sdram读写测试实验Verilog逻辑源码Quartus工程文件+文档说明,DRAM选用海力士公司的 HY57V2562 型号,容量为的 256Mbit,采用了 54 引脚的 TSOP 封装, 数据宽度都为 16 位, 工作电压为 3.3V,并丏采用同步接口方式所有的信号都是时钟信号。FPGA型号Cyclone4E系列中的EP4CE6F17C8,Quartus版本17.1。 timescale 1ps/1ps module top ( input clk, input rst_n, output[1:0] led, output sdram_clk, //sdram clock output sdram_cke, //sdram clock enable output sdram_cs_n, //sdram chip select output sdram_we_n, //sdram write enable output sdram_cas_n, //sdram column address strobe output sdram_ras_n, //sdram row address strobe output[1:0] sdram_dqm, //sdram data enable output[1:0] sdram_ba, //sdram bank address output[12:0] sdram_addr, //sdram address inout[15:0] sdram_dq //sdram data ); parameter MEM_DATA_BITS = 16 ; //external memory user interface data width parameter ADDR_BITS = 24 ; //external memory user interface address width parameter BUSRT_BITS = 10 ; //external memory user interface burst width parameter BURST_SIZE = 128 ; //burst size wire wr_burst_data_req; // from external memory controller,write data request ,before data 1 clock wire wr_burst_finish; // from external memory controller,burst write finish wire rd_burst_finish; // from external memory controller,burst read finish wire rd_burst_req; // to external memory controller,send out a burst read request wire wr_burst_req; // to external memory controller,send out a burst write request wire[BUSRT_BITS - 1:0] rd_burst_len; // to e
SD卡读写测试 rtl.zip
2021-04-09 14:03:12 13KB FPGA技术 SD卡读写
1
根据STM32f429sdio引脚,存储单元为热插拔TF卡,最大支持32G扩展,移植文件系统,可读取内存空间以及根据系统时间创建多级文件夹(需要支持RTC)
2021-03-20 09:11:28 15.11MB STM32f429 SD FATFS 文件系统
1
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 ), //模块输入的时钟频率
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