0,需求
用查找表设计实现一个正弦波形发生器
寻址的位宽是10位,数据量是1024个,输出的数据是16位
1,需求分析
数据量是1024个:
x = linspace(0,2*pi,1024)
输出数据是16位:
y范围:0~2^16 -1 = 0~65535
y =( sin(x)+1)*65535/2
寻址的位宽是10位
输入是0~1023 1023 占用10位
操作步骤
1,使用matlab 生成数据,制作sin_rom.coe文件
x = linspace(0,2*pi,1024);
y =floor( (sin(x)+1)*(65535/2));
plot(x,y);
format long g
filesize = size(y,2);
fileID = fopen('sin_rom.txt','w');
for i= 1:filesize
fprintf(fileID,'%dn',y(i));
end
2,打开vivado,制作ROM原语
这里要注意一下,只要在IP中勾选了Primitives Output Register,那么就意味着你会延时两个时钟周期输出数据,在Summary中也可查看
3,生成原语例化文件,供程序调用
vlg_design
/
/*
用查找表设计实现一个正弦波形发生器
寻址的位宽是10位,数据量是1024个,输出的数据是16位
y = linspace(0,65535,1024)
*/
/
`timescale 1ns/1ps
module vlg_design(
input i_clk,
input i_rst_n,
inp服务器托管网ut i_en,
input[9:0] i_data,
output o_vld, //有效信号
output[15:0] o_data
);
//
//o_vld是i_en两个时钟周期的延时
reg[1:0] r_vld;
always@(posedge i_clk)
if(!i_rst_n) r_vld
testbench_top
`timescale 1ns/1ps
module testbench_top();
//参数定义
`define CLK_PERIORD 20
服务器托管网
//接口申明
reg i_clk;
reg i_rst_n;
reg i_en;
reg[9:0] i_data;
wire o_vld; //有效信号
wire[15:0] o_data;
vlg_design vlg_design_inst (
.i_clk(i_clk),
.i_rst_n(i_rst_n),
.i_en(i_en),
.i_data(i_data),
.o_vld(o_vld),
.o_data(o_data)
);
integer i;
initial begin
i_en
4,仿真验证输出
5,仿真波形展开,模拟输出正弦波效果
右击属性
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
相关推荐: 14:00面试,14:08就出来了,问的问题有点变态。。。。。。
从小厂出来,没想到在另一家公司又寄了。 到这家公司开始上班,加班是每天必不可少的,看在钱给的比较多的份上,就不太计较了。没想到5月一纸通知,所有人不准加班,加班费不仅没有了,薪资还要降40%,这下搞的饭都吃不起了。 还在有个朋友内推我去了一家互联网公司,兴冲冲…