【FPGA/verilog -入门学习10】verilog 查表法实现正弦波形发生器

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,'%d\n',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,
    input 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 <= 'b00;
    else r_vld <= {r_vld[0],i_en};
    
assign o_vld = r_vld[1];


//IP ROM_LUT
blk_mem_gen_0 your_instance_name (
  .clka(i_clk),    // input wire clka
  .addra(i_data),  // input wire [9 : 0] addra
  .douta(o_data)  // output wire [15 : 0] douta
);
endmodule

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 <= 0;
i_clk <= 0;
i_rst_n <= 0;
i_data <= 0;
#2000;
i_rst_n <= 1;
end

always #(`CLK_PERIORD/2) i_clk = ~i_clk;

//产生激励
initial begin
    @(posedge i_clk);
    @(posedge i_rst_n);    
    i_en <= 1;
    @(posedge i_clk);    
    for (i = 1;i <= 1024;i = i+1) begin
        i_data <= i;
        @(posedge i_clk);
    end
    @(posedge i_clk);
    i_en <= 0;
    #50_000;
    $stop;
end

//实时显示
always@(posedge i_clk) begin
    if(o_vld) $display("%d",o_data);
    else ; 
end
endmodule
 

4,仿真验证输出

5,仿真波形展开,模拟输出正弦波效果

右击属性

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/242402.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Docker部署Mysql5.7x和Myslq8.x

Docker部署Mysql5.7x和Myslq8.x 文章目录 1.部署mysql5.7.x2.部署mysql8.x3.创建用户授权及远程登录3.1 mysql5.7创建用户授权及远程登录3.2 mysql8创建用户授权及远程登录 4.总结 1.部署mysql5.7.x 在D盘下的mysql目录下新建如下目录&#xff1a; D:\mysql\conf\my.cnf内容如下…

8GB内存的 MacBook Pro够用吗?苹果高管回应:完全够用

苹果 2023 年 M3 芯片款 MacBook Pro 运行内存为 8GB 起步&#xff0c;因此招致了外界广泛的批评&#xff0c;外媒 MacRumors 日前评价了配备相关运行内存的 MacBook Pro&#xff0c;认为 8GB RAM 在“专业和创意工作中”不够用&#xff0c;只适合“网页浏览、文档编辑、播放影…

java实现局域网内视频投屏播放(四)投屏实现

代码链接​​​​​​​​​​​​​​​​​​​​​ 设备发现 上一篇文章说过&#xff0c;设备的发现有两种情况&#xff0c;主动和被动&#xff0c;下面我们来用java实现这两种模式 主动发现 构建一个UDP请求发送到239.255.255.250:1900获取设备信息&#xff0c;UDP包的…

对比学习学习记录1

对比学习学习记录 SimCLR Framework 关键在于定义正负样本判断异同相同的就是正例不同的就是负例让模型学到其中的规律 通过encoder对图像提取特征得到一个向量这里的encoder可以是resnet还需要定义相似度的函数计算正负样本之间的距离 对于上面的图片首先对图片进行两种随机的…

zabbix——实现高效网络监控

在当今的数字化时代&#xff0c;网络和服务器的健康状况对于企业的正常运营至关重要。为了及时发现和解决潜在的问题&#xff0c;许多企业选择使用网络监控工具来追踪服务器的性能和网络参数。其中&#xff0c;Zabbix是一个功能强大且开源的网络监控工具&#xff0c;被广泛应用…

环境搭建及源码运行_java环境搭建_mysql安装

1、介绍 MySQL是一个关系型数据库管理系统&#xff0c;由瑞典MySQL AB 公司开发&#xff0c;属于 Oracle旗下产品。MySQL是最流行的关系型数据库管理系统之一 1、源码中涉及到的表&#xff1a;mysql 表&#xff1a;订单、意见反馈、用户基础信息、商品、购物车等表 2、订单属于…

虚拟现实三维电子沙盘数字沙盘开发教程第5课

虚拟现实三维电子沙盘数字沙盘无人机倾斜摄影全景建模开发教程第5课 设置system.ini 如下内容 Server122.112.229.220 userGisTest Passwordchinamtouch.com 该数据库中只提供 成都市火车南站附近的数据请注意&#xff0c;104.0648,30.61658 在鼠标指定的位置增加自己的UI对象&…

Java听潮阁(SpringCloud项目)

一、简介 本网站是不凉域网络技术工作室的后台管理网站和旗下的网站&#xff08;目前只有Java听潮阁&#xff09;&#xff0c;后台管理网站具有统计旗下所有网站的数据功能&#xff0c;并且能直接对旗下所有网站进行管理。 Java听潮阁网站是一个Java书籍网站&#xff0c;名字…

力扣40. 组合总和 II(java 回溯法)

Problem: 40. 组合总和 II 文章目录 题目描述思路解题方法复杂度Code 题目描述 思路 在使用回溯之前我们首先可以明确该题目也是一种元素存在重复但不可复用的组合类型问题。而此题目可以参考下面一题的大体处理思路&#xff1a; Problem: 90. 子集 II 具体的&#xff1a; 1.首…

2023-12-13 树的层次遍历和树的反转以及树的对称

二叉树的层次遍历、翻转二叉树和对称二叉树 102. 二叉树的层序遍历 核心&#xff1a;BFS广度优先遍历&#xff0c;就是维护一对队列去遍历&#xff01;队列先进先出&#xff0c;符合一层一层遍历的逻辑。 # Definition for a binary tree node. # class TreeNode: # def …

四、编写第一个 Shell 脚本

一、编写 Shell 脚本内容 打开文本编辑器&#xff08;可以使用 vi/vim 命令来创建文件&#xff09;&#xff0c;新建一个文件 chaoqing.sh&#xff0c;扩展名为 sh &#xff08;sh 表示 shell&#xff09;&#xff0c;扩展名不影响脚本的运行。 输入一些代码&#xff0c;如下…

配置本地端口镜像示例(1:1)

本地端口镜像简介 本地端口镜像是指观察端口与监控设备直接相连&#xff0c;观察端口直接将镜像端口复制来的报文转发到与其相连的监控设备进行故障定位和业务监测。 配置注意事项 观察端口专门用于镜像报文的转发&#xff0c;因此不要在上面配置其他业务&#xff0c;防止镜像…

zxjy008- 项目集成Swagger

Swagger可以生成在线文档&#xff0c;还可以进行接口测试。 1、创建common模块(maven类型) 为了让所有的微服务子子模块都可以使用&#xff0c;可以在guli_parent父工程下面创建公共模块 1.1 在guli_parent父工程下面创建公共模块 配置&#xff1a; groupId&#xff1a;com…

HTML---表单

文章目录 前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据总结 一.表单概念 HTML表单是网页上用于收集用户输入信息的一种元素。它由一系列输入字段&#xff08;input&#xff09;、选择字段&#xff08;select&#xff09;、文本区域&#xff08;textarea&a…

Terrain

最近工作中遇到一个需求&#xff0c;需要在地形上随机生成对应的植被&#xff0c;需要对地形就行解析。 1.对地形的贴图的解析 需要把对应坐标在Terrain Layer成分获取到 2.计算出对应坐标中Terrain Layer占比最大的成分当作当前坐标的主要成分&#xff0c;例如草地&#xff…

C# 两个日期比较大小

文章目录 C# 两个日期比较大小直接比较大小工具类DateTime.Compare C# 两个日期比较大小 直接比较大小 string ed "2023-12-13 09:27:59.000";//过去式DateTime nowDateTime DateTime.Now;DateTime expirationDate Convert.ToDateTime(ed);//质保期 长日期DateT…

python篇FastAPI_快速使用手册

一个新兴的web框架 安装fastapi pip install fastapi asgi 服务器安装 pip install "uvicor[standard]"helloworld from fastapi import FastAPI appFastAPI() app.get("/") async def root():return {"message" : "hello world"…

工业性能CCD图像处理

硬件部分 软件部分 CCD新相机的调试处理(更换相机处理,都要点执行检测来查看图像变化) 问题:新相机拍摄出现黑屏,图像拍摄不清晰,(可以点击图像,向下转动鼠标的滚轮(Mouse Wheel)放大图像) 解决办法:进入CCD的设定,选择对应的相机,调试好参数(如下图) 选择好相…

CentOS7安装MySQL8.0

一、使用Yum安装 1. 使用wget下载MySQL的rpm包 wget https://repo.mysql.com//mysql80-community-release-el7-3.noarch.rpm2. 安装下载好的rpm包 yum localinstall mysql80-community-release-el7-3.noarch.rpm 3. 安装mysql&#xff08;该步可能出现问题&#xff09; yum…

代码分支管理+DevOps策略实践

现在团队相关的一些背景&#xff1a;1、一个人维护几个系统&#xff1b;2、需求急且大小不一&#xff0c;产品经理也不会去细拆需求&#xff1b;3、敏捷成熟度几乎为0&#xff0c;没有DevOps&#xff0c;没有自动化测试&#xff1b;4、使用SVN。 将要变成&#xff1a;1、一个人…