• 手绘RTL图
  • 系统生成的RTL图



    最后一张RTL的图片因为有32位的输入,图片比较大,只截取了一部分。
  • SignalTap抓取的波形

    500KHz波形

    1MHz波形

    3MHz波形
    基本原理:一个周期内有1024 个采样点,基本的时钟周期为50MHz;为使输出的波形频率发生变化,可以改变输出的间隔即每隔K个点输出一个采样数据,此时输出的波形频率与K之间的关系为:

    输出波形频率=K∗时钟频率1024

    输出波形频率 = \dfrac{K * 时钟频率}{1024}
    当输出的频率为500KHz时,计算的K≈10,以此为基准1MHz的输出K=20,3MHz的输出,K=60。

  • 代码块
    VerilogHDL代码

module addr_cnt(CLK,         //时钟sw_fq,       //频率选择控制Address,     //输出间隔ROMadd);     //ROM表地址
input CLK;
input [1 : 0] sw_fq;
output reg [31 : 0] Address;
output reg [9 : 0] ROMadd;
reg [5 :0] K;       //最大为60,五位二进制数的最大表示为63.
always @ (posedge CLK)
begin case(sw_fq)2'd00 : Address <= 10;   //输出500KHz2'd01 : Address <= 20;   //输出1MHz2'd10 : Address <= 60;   //输出3MHzdefault Address <= 10;endcase
end
always @ (posedge CLK)
begin ROMadd <= Address + ROMadd;   //ROM表步进间隔输出
end
endmodule

生成ROM表的MatLab程序是使用杜大大的程序:

function generate_DDS_rom()
clc;
close all;
disp('# generate_DDS_rom() Running~');%%///
%   set your rom config here
rom_word_len = 12;  % rom data word length in bit
rom_addr_len = 10;  % rom address word length in bit
rom_file_name = 'DDS_CORE_ROM.v';  % rom file name
rom_file_dir  = './';  % rom file dir path
description   = 'DDS CORE ROM FILE' ;% rom description
%%///rom_vec_len = 2^rom_addr_len;   %2^10=1024
index = (0:rom_vec_len-1) ;     %0~1023
rom_data_vec_float = sin(2*pi*index/rom_vec_len);   %最大值为1的1024点正弦波
figure; plot(rom_data_vec_float);    % for debug
rom_data_vec_int = fix(rom_data_vec_float * (2^(rom_word_len-1) - 1));  %最大值为2047,为了保证最高位为符号位
figure; plot(rom_data_vec_int);      % for debugrom_cfg.rom_word_len  = rom_word_len   ;
rom_cfg.rom_file_name = rom_file_name  ;
rom_cfg.rom_file_dir  = rom_file_dir   ;
rom_cfg.description   = description    ;
gen_rom_rtl(rom_cfg, rom_data_vec_int);end % generate_DDS_rom()% ///
% gen_rom_rtl()
%   generate synthesizable rom  hdl code(need synthesizer support).
% ///
% INPUT:
%   data vector, must be integer value
%   rom word len
%   rom file dir string
%   rom file name string
% OUTPUT:
%   verilog format rom file, all data in 2's complement code format
function gen_rom_rtl(rom_cfg, data_vec)rom_word_len   = rom_cfg.rom_word_len  ;rom_file_name  = rom_cfg.rom_file_name ;rom_file_dir   = rom_cfg.rom_file_dir  ;description    = rom_cfg.description   ;data_vec_len = length(data_vec);addr_word_len  = ceil(log2(data_vec_len));% check input be integer valuedata_vec_fixed = fix(data_vec);diff_sum = sum(data_vec == data_vec_fixed);% all integer elements will cause the diff_sum be vector length if(diff_sum < data_vec_len)fprintf(1,'# ERROR, gen_rom_rtl(), input data_vec must be integer value\n');return;endrom_file_dir_name = strcat(rom_file_dir, rom_file_name);data_vec_fixed_2c =  data_vec_fixed + (2^rom_word_len) .* (data_vec_fixed < 0);romNum        = 2^addr_word_len;data_str_cell  = cell(data_vec_len, 1);for idx = 1:data_vec_len data_str_cell{idx} = Dec2BinStr(data_vec_fixed_2c(idx), rom_word_len);end % for(idx = 1:data_vec_len)if(romNum > data_vec_len)for idx = data_vec_len+1:romNum data_str_cell{idx} = Dec2BinStr(0, rom_word_len); endendfid_rom_file = fopen(rom_file_dir_name, 'w');if(fid_rom_file == -1)errMsg = strcat('ERROR, gen_rom_rtl(), create file',rom_file_dir_name, ',failed');fprintf(1, '%s\n', errMsg);return;end% rom data print % get rom module namerom_name = rom_file_name;len_rom_file_name = length(rom_file_name);if(strcmp(rom_name(len_rom_file_name-1:len_rom_file_name), '.v'))rom_name(len_rom_file_name-1:len_rom_file_name) = [];elsefprintf(1,'#WARNINIG, gen_rom_rtl(), rom_file_name may error, check it!\n');endfprintf(fid_rom_file,  ...'// ************************************************************** //\n');fprintf(fid_rom_file,  ...'// FILE    : %s \n', rom_file_name);fprintf(fid_rom_file,  ...'// DSCP    : %s\n', description);fprintf(fid_rom_file,  ...'// ABOUT   : auto generated rom file by gen_rom_rtl.m\n');fprintf(fid_rom_file,  ...'// DATE    : %s \n',  datestr(now));fprintf(fid_rom_file,  ...'// ************************************************************** //\n');% generate the crom modulefprintf(fid_rom_file, ...'// module %s()\n', rom_name);fprintf(fid_rom_file, ...'module %s(\n', rom_name);fprintf(fid_rom_file, ...'  CLK    ,           // clock\n');fprintf(fid_rom_file, ...'  RA     ,           // read address\n');fprintf(fid_rom_file, ...'  RD     );          // read data\n');fprintf(fid_rom_file, ...'input          CLK;\n');fprintf(fid_rom_file, ...'input  [%-2d :0] RA;\n', addr_word_len-1); fprintf(fid_rom_file, ...'output [%-2d :0] RD;\n', rom_word_len-1);fprintf(fid_rom_file, ...'reg    [%-2d :0] RD;\n', rom_word_len-1);fprintf(fid_rom_file, ...'always @ (posedge CLK)\n'); fprintf(fid_rom_file, ...'  case(RA)\n');for addr = 0:1:data_vec_len-1fprintf(fid_rom_file, ... '     %-2d''d %-6d:RD = #1 %-2d''b %s; ', ...addr_word_len,addr, rom_word_len, data_str_cell{addr+1});fprintf(fid_rom_file, ... '// %6d 0x%s \n', ...data_vec_fixed(addr+1), dec2hex(data_vec_fixed_2c(addr+1)));endfprintf(fid_rom_file, ...'  default : RD = #1 0;\n');fprintf(fid_rom_file, ...'  endcase\n');fprintf(fid_rom_file, ...'endmodule \n');fclose(fid_rom_file);fprintf(1,'# File: %s written\n', rom_file_dir_name);end % function gen_rom_rtl()
% ///
function str = Dec2BinStr(data, word_len)str = '';for idx = word_len-1:-1:0 bit_val = bitand(1, bitshift(data, -idx));str = strcat(str, int2str(bit_val));end
end % function Dec2BinStr()
  • DDS输出的图像的频域分析

    500k波形时域图

    500k波形的频域分析

    1M波形的时域图

    1M波形的频域分析

    3M波形的时域图

    3M波形的频域图

用分析500k波形的MATLAB代码作为示例:

signal = transpose(VarName6) / 2048; %数据归一化处理
CLK = 50 * 1000000;
N = 512;
t=[0:1/CLK:(N-1)/CLK]; %持续时间
figure(1);plot(t,signal);
xlabel('时间(s)');ylabel('value');
title('时域图');%绘制时域图形
Y = fft(signal,N); %FFT变换
size = abs(Y); %取模
size=size/(N/2); %换算成实际的幅度
figure(2);
stem(F(1:N/2),size(1:N/2)); %fft频域图
axis([0 5E6 0 1.5]);
title('频谱图');
xlabel('频率(Hz)');ylabel('幅度');

将signal tap中的数据导入到MATLAB中分析的注意事项:
- 导出signal tap 中的数据有TXT和CSV两种文本格式,但是CSV的数据格式是带符号的二进制数据,用MATLAB分析需要先将其转换为十进制在分析。这个过程较为麻烦,TXT文本的数据是十进制可以用MATLAB的import data直接导入。
- 用TXT导入数据时,数据会被截断需要合并。
- 导入的数据要注意是文本格式还是Number。

DDS作业(作业3)相关推荐

  1. HTML期末作业作业-仿商城个人中心网站模板(HTML+CSS+JavaScript)

    HTML期末作业作业-仿商城个人中心网站模板(HTML+CSS+JavaScript) 商城个人中心网站模板,全套模板,包括注册.登录.个人中心首页.实名认证.购物车.我的成长值.意见投诉.自营店铺. ...

  2. R课程 第三次作业 作业:股票收益率的影响因素分析

    R课程 第三次作业 作业:股票收益率的影响因素分析 背景介绍,什么因素会影响股票的收益率是一个重要的金融学问题,经典资本资产定价模型认为股票的预期收益率,仅由系统性风险(beta)决定,Fama-Fr ...

  3. 实变函数精品课程 (课件, 上课视频, 作业, 作业答案, 作业讲解, 作业纠错全都有)...

    实变函数精品课程 (课件, 上课视频, 作业, 作业答案, 作业讲解, 作业纠错全都有) 自封的实变函数精品课程, 历时7 年打造的. (课件, 上课视频, 作业, 作业答案, 作业讲解, 作业纠错全 ...

  4. 信号与系统 2022 春季学期第一次作业-作业题目准备

    简 介: 关于作业的参考答案需要根据之前结果,再结合现在的修改进行补充. 关键词: 作业,信号与系统 #mermaid-svg-HSmAT7ir1Kl95O1z {font-family:" ...

  5. 第三次大作业-作业准备

    在第二次大作业结束之后,第三次大作业-白盒测试实践在三周内进行. 由于大家刚进行完一次大作业的辛苦工作,于是本组决定第一周交由大家复习学习之前的黑盒测试实践.搜集资料.自发配置工作环境和工具.进行自己 ...

  6. 怎么上传云班课的计算机作业,云班课如何提交课后作业 作业提交教程

    老师在云班课中开始教学活动后,你可以在活动列表页面找到新发布的活动,并进行作答. 当老师把作业/小组任务的状态标记为进行中时,你就可以按规定开始作答作业. 一.不分组提交作业 不分组作业是*简单直接的 ...

  7. 如何做云班课上的计算机作业,云班课如何提交课后作业 作业提交教程

    老师在云班课中开始教学活动后,你可以在活动列表页面找到新发布的活动,并进行作答. 当老师把作业/小组任务的状态标记为进行中时,你就可以按规定开始作答作业. 一.不分组提交作业 不分组作业是*简单直接的 ...

  8. python第三周测试_第三周作业 - 作业 - 信息与计算17数31SWE - 班级博客 - 博客园...

    格式要求 请大家在作业开头添加格式描述,仿照如下 这个作业要求在哪里 我在这个课程的目标是 此作业在哪个具体方面帮我实现目标 其他参考文献 作业正文 博客作业可以给出链接 正文 ........... ...

  9. 软件工程第一次作业作业

    这个作业属于软件工程课 软件工程4班 这个作业要求在 作业要求 这个作业的目标 评估当下,展望未来 其它参考文献 csdn,<构建之法> 文章目录 1.评估当前的自己 个人简历 当前值 2 ...

  10. 高一计算机旅游计划作业,作业:旅行计划

    200 元左右. 然后青 年旅店一晚大概 50 元, 合计 200 元. 每个人总计 1400 元. 下面是到达目的地之 后的行程安排. 第一天:厦门大学--南普陀寺. 厦门大学, 依山傍海, 正大门 ...

最新文章

  1. java50车架适合身高,【经验分享】身高与车架的选择
  2. 安装mysql和memcached
  3. 【sparse coding】【转】sparse coding稀疏表达论文列表
  4. Windows Server 2008标准证书使用记录
  5. Xen server三 为xen添加存储及创建虚拟机
  6. ACM 整数划分(四)
  7. uses-sdk标签详解
  8. 斗鱼html5插件 edge,斗鱼HTML5播放器插件
  9. 【potplayer安装及设置LAV Splitter】
  10. 服务器系统访问量统计,通过网站统计或系统监视器查看IIS并发连接数
  11. 积分商城开发及小程序积分商城功能介绍
  12. 《Dreamweaver CS6 完全自学教程》笔记 第十三章:Dreamweaver 中的 HTML 代码
  13. 拉格朗日四平方和定理c语言,拉格朗日四平方定理的证明
  14. 属相婚配php,属兔的属相婚配表_属兔的最佳属相婚配
  15. 藏宝阁显示您在该服务器没有角色或没有绑定密保!,《大唐无双》藏宝阁提现 藏宝阁角色交易常见问题...
  16. 零代码在线绘制GO富集结果GOcircle图
  17. 你知道互联网行业哪些岗位需求量最大?什么职位最赚钱?
  18. HTML5培训课件:CSS3新增属性拿走不谢
  19. Angular标准 commit message 提交信息、commit 验证、standard-version 自动版本更替和 changelog 输出
  20. java jocky 下载,jocky1.0.3 (原joc) java混淆器 去除jdk版本限制

热门文章

  1. Kaggle泰坦尼克号生存预测挑战——模型建立、模型调参、融合
  2. python 优点 英文_值得关注的 10 个 Python 英文博客
  3. iPad 使用技巧:Safari 浏览器
  4. 「为了孩子上海淀小学,我一周上七节课」
  5. 日常开发用到的谷歌浏览器插件
  6. 详解图像形态学操作之图形的腐蚀和膨胀的概念和运算过程,并利用OpenCV的函数erode()和函数dilate()对图像进行腐蚀和膨胀操作
  7. 联想拯救者Y700评测 怎么样
  8. RollPitchYaw傻傻分不清
  9. 2020 年互联网大厂薪资出炉!你酸了吗
  10. [HEOI 2013 day2] 钙铁锌硒维生素 (线性代数,二分图匹配)