Vivado-IP-DDS and Testbench Learning

ops/2024/11/30 12:53:47/

DDS内部结构

1713874055690.png

实现流程

首先新建一个工程,创建bd文件,添加DDS Compiler核,此处不多赘述

1713873604745.png

Block Design

1713874499213.png

在观测输出的信号时,需要将最高位符号位的信号取反,这样才能输出正弦波,否则输出的波形如下图所示

1713873323542.png

将tvalid信号取反是因为将这个信号接到了开发板的LED0上,led需要低电平才能点亮,因此将vld信号进行取反

Testbench

bd文件转化成的Verilog文件如下

//Copyright 1986-2018 Xilinx, Inc. All Rights Reserved.
//--------------------------------------------------------------------------------
//Tool Version: Vivado v.2018.3 (win64) Build 2405991 Thu Dec  6 23:38:27 MST 2018
//Date        : Tue Apr 23 18:35:43 2024
//Host        : MOERJIE_PC running 64-bit major release  (build 9200)
//Command     : generate_target top_wrapper.bd
//Design      : top_wrapper
//Purpose     : IP block netlist
//--------------------------------------------------------------------------------
`timescale 1 ps / 1 psmodule top_wrapper(Res_0,aclk_0,wave_out_0);output [0:0]Res_0;input aclk_0;output [15:0]wave_out_0;wire [0:0]Res_0;wire aclk_0;wire [15:0]wave_out_0;top top_i(.Res_0(Res_0),.aclk_0(aclk_0),.wave_out_0(wave_out_0));
endmodule

针对顶层模块的输入输出设计如下testbench文件

`timescale 1ns / 1ps
//
// Company: 
// Engineer: Sawen Moerjie 
// 
// Create Date: 2024/04/23 13:51:29
// Design Name: 
// Module Name: top_tb
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//module top_tb();reg aclk;//wire [15:0] M_AXIS_DATA_0_tdata;wire Res_0;wire [15:0] wave_out;initial beginaclk=1'b0;end always #5 aclk=~aclk;top_wrapper top_wrapper_u0(.aclk_0                 (aclk),.Res_0   (Res_0),.wave_out_0             (wave_out));endmodule

Testbench语法

1. 输入信号声明使用reg,输出信号声明使用wire

引脚约束

1713874934622.png

IO电平标准要设置为LVCMOS33,否则无法生成Bitstream文件

时序约束

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

添加完成后xdc文件会新增一行

1713878679670.png


http://www.ppmy.cn/ops/22696.html

相关文章

【python】socket通信

服务器 server.py import socket #socket模块 import time #时间模块 import threading #线程模块#定义一个函数用来进行具体的数据交互,由子线程调用. def session(sock, addr):print(欢迎新 %s:%s... % addr)sock.send(bWelcome!)while True:data sock.recv(10…

【C++】const修饰输入参数

文章目录 const修饰输入参数 const修饰输入参数 在C中,传参时使用const可以防止在函数内部不小心修改了传入的参数,这样可以提高代码的健壮性和可维护性。const表示函数内部不会修改传入的参数。 以下是一个使用const修饰函数参数的例子: …

HTML中datalist的用法

在HTML中&#xff0c;<datalist>元素用于为<input>元素提供预定义的选项列表&#xff0c;供用户从中选择。通常&#xff0c;它配合<input>元素的list属性一起使用。以下是如何使用<datalist>元素的简单示例&#xff1a; <!DOCTYPE html> <h…

C语言学习/复习34--内存相关笔试题/C与C++的内存/柔性数组

一、动态内存管理笔试题 1.值传递 注意事项1&#xff1a;指针的地址传递需要将指针的地址用二级指针接收&#xff0c;本题属于值传递不属于地址传递 修改&#xff1a;1改为地址传递&#xff0c;2释放malloc()函数申请的空间 注意事项2&#xff1a;printf()字符串时&#xff0c;…

瓦片编辑器成功移植到小熊猫C++ 2.25.1版本,解决_findnext移植问题

移植之后出现绿色屏幕闪退 查了版本回滚直到不闪退&#xff0c;发现是在读取自定义文件上出问题 然后在找读取自定义文件函数&#xff0c;发现是读取图片部分出问题 然后就卡住了 调试半天&#xff0c;不是数据溢出&#xff0c;于是就看 函数_findnext,网上搜 ———_findn…

STM32_舵机的实战

一、配置相应的管脚 二、写代码

rust中结构体的属性默认是不能修改的,要想修改可以有两种方式

Rust中结构体里面的属性默认是不支持修改的&#xff0c;而且默认不是pub的&#xff0c;要想修改的话&#xff0c;有两种方式&#xff0c;我以为和python里面的类似呢&#xff0c;但是还是需要一点技术含量的。如果想在引到外部修改&#xff0c;需要声明pub&#xff0c;如果想在…

卫浴品牌商家做展示预约小程序的作用是什么

卫浴品牌类别多、普通/智能、场景化等&#xff0c;无论企业还是经销商市场门店都比较饱满&#xff0c;虽然市场需求度高&#xff0c;但同样需要商家不断拓宽销售渠道和挖掘客户价值&#xff0c;破圈增长。 线上多平台发展尤为重要&#xff0c;而小程序作为连接点&#xff0c;对…