FPGA学习-rom只读存储器(嵌入式块应用)

实验现象:

        将一组固定的数据(三角波、正弦波)存储在IP核构建的rom中。系统工作时,从rom中按照地址顺序读取数据,有modelsim仿真工具观察波形。

第一步:

第二步:配置ip核rom

        主要设置数据位宽和地址深度。

第三步:

        rom默认必须要有一个初始化.mif文件(而ram不必要),需要在一开始就先新建一个.mif文件。

第四步:

        生成IP核后,记着把.qip文件设置成Top顶层文件。

testbench测试文件编写:

`timescale 1ns/1ns
`define clock_period 20
module rom_tb;

	reg	[7:0]  address;
	reg	       clock;
	wire [7:0]  q;

	integer i;

	rom rom(
		.address(address),
		.clock(clock),
		.q(q)
	);

	initial clock=1;
	always #(`clock_period/2) clock=~clock;
	
	initial begin
		address=0;
		#(`clock_period*20+1);
		for(i=0;i<=255;i=i+1) begin
			#(`clock_period);
			address=address+1;
		end
		#(`clock_period*20);
		$stop;
	end
endmodule

        这里三角波是数据宽度=8位0~255,地址深度=256,从0~128~1一共256个数字;

        正弦波是数据宽度=10位0~1023,地址宽度=2048,从512~1023~0~510一共2048个数字;

        所以在编辑rom IP核时需要注意位宽和深度,在tesbench中的激励定义和for循环中也要做相应的修改。

波形图分析:

图1和图二都是三角波

图三是正弦波

图四是对上面的三角波和正弦波合在一个mif文件中,修改rom位宽和深度读取到的数据波形

如何在已有的IP核基础上进行编辑:

FPGA 读写SD卡音乐播放例程Verilog逻辑源码Quartus工程文件+文档说明,,FPGA型号Cyclone4E系列中的EP4CE6F17C8,Quartus版本17.1。 实验简介 在其他实验中我们已经完成了 SD 卡读写和音频模的录音播放,本实验通过搜索 SD 卡中 WAV 音乐文件,然后送到音频模播放,完成一个简单音乐播放器的功能。 2 实验原理 本实验一个关键是在没有文件系统的情况下,搜索 SD 卡每个扇区的内容,匹配出 WAV 文件, 这里有一个假设:假设每一个文件都是从一个扇区第一个字节开始而且文件是连续存储的,经过 大量实验,发现 FAT32 文件格式中的文件确实如此。 2.1 WAV 文件格式 大部分的文件都有文件头,WAV 也丌例外,我们通过分析 SD 卡一个扇区的前几个字节,判 断这个文件是否为 WAV 文件。 WAV 文件作为多媒体中使用的声波文件格式之一,它是以 RIFF 格式为标准的。RIFF 是英文 Resource Interchange File Format 的缩写,每个 WAV 文件的头四个字节便是“RIFF”,所以本实验 就简单的以每个扇区的前 4 个字节是否为“RIFF”判断该文件是否为 WAV 文件,紧接着 4 个字节 表示文件的大小,这样我们就可以确定要读取数据量。WAV 文件头大小是 88 字节,在播放时 要把前 88 个字节的文件头去掉。 module top( input clk, input rst_n, input key1, input wm8731_bclk, //audio bit clock input wm8731_daclrc, //DAC sample rate left right clock output wm8731_dacdat, //DAC audio data output input wm8731_adclrc, //ADC sample rate left right clock input wm8731_adcdat, //ADC audio data input inout wm8731_scl, //I2C clock inout wm8731_sda, //I2C data output sd_ncs, //SD card chip select (SPI mode) output sd_dclk, //SD card clock output sd_mosi, //SD card controller data output input sd_miso, //SD card controller data input output [5:0] seg_sel, output [7:0] seg_data ); wire[9:0] lut_index; wire[31:0] lut_data; wire[3:0] state_code; wire[6:0] seg_data_0; //I2C master controller i2c_config i2c_config_m0( .rst (~rst_n ), .clk (clk ),
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值