工作笔记.docx

上传人:b****5 文档编号:5048349 上传时间:2022-12-12 格式:DOCX 页数:11 大小:306.51KB
下载 相关 举报
工作笔记.docx_第1页
第1页 / 共11页
工作笔记.docx_第2页
第2页 / 共11页
工作笔记.docx_第3页
第3页 / 共11页
工作笔记.docx_第4页
第4页 / 共11页
工作笔记.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

工作笔记.docx

《工作笔记.docx》由会员分享,可在线阅读,更多相关《工作笔记.docx(11页珍藏版)》请在冰豆网上搜索。

工作笔记.docx

工作笔记

Virtex-4系列的FPGA

Virtex-4系列的FPGA采用了高级硅模组(AdvancedSiliconModularBlock,ASMBL)架构。

ASMBL架构从两个级别对设计进行了提升,一是解决基于应用领域的设计问题;二是解决在传统ASIC和FPGA设计中都存在的一些技术约束问题。

Virtex-4系列具有3个平台:

用于高性能和高密度综合应用的LX平台(面向逻辑优化的平台);用于高性能信号处理的SX平台(面向信号处理优化的平台);用于全功能处理和SoC嵌入式设计连接应用的FX平台(全功能平台)。

可配置的逻辑块(ConfigurableLogicBlocks,CLB)是实现时序和组合电路的最主要的逻辑资源。

每个CLB单元包含4个互连的Slice。

Virtex-4的每个BRAM可存储18Kb的数据,数据读出的时钟频率为500MHz。

Virtex-4系列最小规模的FPGA器件包含48个BRAM;Virtex-4系列最大规模的FPGA器件具有552个BRAM。

器件中Slice和CLB之间的数量关系:

1个CLB逻辑模块具有4个Slice,1CLB=4Slice;

1个Slice包括2个LUT、2个触发器以及算术逻辑,1Slice=2×16位LUT+2触发器+算术逻辑/MUX;每个Slice具有=2×16位LUT,总的分布式RAM的容量为16×6144=98304=96×1024=96Kb(只有SLICEM的LUT可被用做分布式RAM)。

DSP48Slice是Virtex-4器件上的XtremeDSP部件。

每个XtremeDSP单元都包括两个DSP48Slice,构成了一种通用的DSP计算元件。

DSP48Slice可执行一个18×18位的乘法以产生一个36位的乘积,该乘积在一个48位累加器中实现了累加(这就是用“48”命名DSP单元的原因)。

Virtex-5系列的FPGA

Virtex-5FPGA基于65nm的三栅极氧化层技术,使用先进的硅组合模块(ASMBL)架构并且实现了更高级别的系统集成。

Modelsim仿真流程

modelsim仿真流程:

modelsim基本的仿真流程包括建立库、建立工程并编译、仿真、调试、但在libero环境中运行modelsim时,软件自动映射库和生成工程文件。

其中功能仿真、综合仿真以及后仿真分别映射presynth、postsynth和postlayout库。

基本流程是:

建立工作库→编译源代码→启动仿真→分析、调试。

♥快捷操作:

※使用“拖-放”操作,直接从信号、结构等窗口向wave窗口中拖放;

※波形放大缩小等操作,放大-键盘“+”,缩小-键盘“-”;

※区域放大,选中的区域全屏显示;

※使添加光标,可以利用光标时间差计算周期等参数;

※显示/隐藏信号路径,方便阅读;

♥设置断点:

※右击变量,选择‘InsertBreakpoint’;当选中的变量波形值发生变化时,仿真自动暂停。

♥保存/打开列表:

※波形列表为.do可执行脚本文件;打开列表可以使用do.do命令执行;※waveformformats选项保存变量、显示方式及变量相对位置等属性;

♥保存/打开波形:

※波形文件为.wlf格式文件,使用File>datasets>saveas来保存波形;※波形文件可用于波形对比的对象,使用File>datasets>open来打开;

♥波形对比:

※在AE版本中,只能实现简单的手动对比波形;

※用File>datasets方式打开波形文件,向wave窗口中添加需要对比的信号;

♥分析数据――list:

表格化显示数据,方便通过搜索特殊值或者特定条件的数据,简化分析数据的过程。

List窗口可通过菜单View>list,或者命令viewlist打开。

♥分析数据――source:

source窗口具有完全的编辑能力,同时提供分析数据的一些操作。

Source窗口可通过双击workspace的总的文件或信号打开。

※查看变量值:

鼠标停留在变量上面,可显示当前值;※设置断点:

source源代码窗口设置条件断点;

♥分析数据――Memories:

memory窗口列出工程中存储单元的数据,方便调试存储器的操作。

※step1:

展开调用RAM单元的模块,并展开至RAM_ROC>STATCONFIG;※step2:

objects窗口选择MEM_512_9选择ViewMemoryContonts;

♥分析数据――watch:

watch窗口中可实现监测变量的变化情况,watch窗口可通过菜单view>watch,或者命令viewwatch打开。

Watch窗口中的对象可以以拖拉的方式从object窗口、wave窗口、source窗口中拖拉进来;

♥分析数据――signals:

signals窗口显示被选中进程模块的变量、变量值。

Signals窗口可通过菜单view>signals,或者命令viewsignals打开。

※排序:

支持按字母的升序或降序排列。

※拖放操作:

可以将信号拖动到wave、list、watch窗口;※过滤器:

选择要察看的信号(输入、输出部信号等等)。

※对信号右键操作,可查看源代码;

WaveformCompare波形对比能快速定位设计在修改前后的区别,在进行波形对比之前要保存原设计的波形文件,此文件为作为对比文件。

※step1:

打开波形对比向导设置;tools->waveformcompare->comparisonwizard;※step2:

导入波形文件,作为对比对象;※step3:

选择对比信号的范围;※step4:

根据信号范围选择需要对比的信号;※step5:

分析数据;

追踪数据流:

数据流窗口能够对VHDL信号或者Verilog的线网型变量进行图示化跟踪,在界面中驱动信号或驱动线网变量的进程显示在左边,反之被驱动信号显示在右边。

可通过双击wave窗口中需要追踪的信号打开dataflow窗口。

※观察设计的连接性:

可以检查设计的物理连接性,可以逐个单元的观察所关注的信号、互联网络或寄存器的输入/输出情况。

※跟踪事件:

跟踪一个非预期的输出事件,使用嵌入波形观察器,可以由一个信号的跳变回溯追踪,查到事件的源头。

※追踪未知态:

未知态在设计中是传递的,用dataflow中Trace>chaseX功能很容易追踪不定态的来源。

※显示层次结构:

可以使用层次化实例显示设计的连通性。

数据流窗口追踪不定态的功能是工程师比较青睐的,在dataflow窗口中使用Trace>ChaseX功能,不断往驱动级追踪不定态传递的源头。

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

view*观察包括signals、wave、dataflow等窗口文件。

例:

viewsignals观察信号变量。

quit-f/-force/-sim 该命令分别是退出ModelSim(-f/-force)和退出仿真(-sim)。

run–all命令用来一直仿真下去。

在ModelSimSE中使用批处理方式来简仿化真步骤,具体做法为,将你所要执行的命令编辑成file.do文件,文件内容如下:

vlibwork                           //建库

vmapworkwork                //映射

vlog*.v*_tb.v  //编译

vsim ***_tb                    //仿真(模块名称)

addwave/***_tb/*           //将***_tb下的所有信号变量加入到wave窗口中,注意”*”

例:

a.没有调用IPCore时

quit-sim

cdE:

/mycounter/modelsim

vlibwork

vlog+acc"E:

/mycounter/modelsim/*.v"

vsim-tps-novoptwork.mycounter_tb

viewwave

addwave-dec/mycounter_tb/*#没有调用IPCore时的仿真命令,注意后面的参数必须为Testbench中的模块名。

addwave-dec/mycounter_tb/uut/*

run10us

例:

b.调用IPCore时

quit-sim

cdE:

/signal_gen/testbench

vlibwork

vlog+acc"E:

/signal_gen/testbench/signal_gen_top_tb.v"

vlog+acc"E:

/signal_gen/source/*/*.v"

vlog+acc"E:

/signal_gen/source/*/*/*.v"

vlog+acc"C:

/Xilinx/12.4/ISE_DS/ISE/verilog/src/glbl.v"

vsim-LD:

/modeltech_6.6a/Xilinx_Lib/simprims_ver-LD:

/modeltech_6.6a/Xilinx_Lib/unisims_ver-LD:

/modeltech_6.6a/Xilinx_Lib/XilinxCoreLib_ver-LD:

/modeltech_6.6a/Xilinx_Lib/unimacro_ver-tps-novoptwork.signal_gen_top_tbwork.glbl

viewwave

deletewave*

addwave-dec/*

addwave-dec/u_signal_gen_top/*

addwave-dec/u_signal_gen_top/u_nco/*

run10ms

Modelsim中的读写文本操作

.Modelsim读文本操作

reg[11:

0]data[0:

2000];

initialbegin

$readmemb("data.txt",data,0,1000);

end

2.Modelsim写文本操作

integerfid;

wiresigned[15:

0]dout;

initial

begin

//打开文件“e:

\signal_gen\testbench\dac_data.txt”

fid=$fopen("e:

/signal_gen/testbench/dac_data.txt");

#(CPU_START_CYCLE);

repeat(DATA_NUM)begin

@(posedgedac_clk)//在时钟的上升沿读接口模块的数据,并将其存入文件

$fdisplay(dds_dout_fid,"%d",dout);

end

$fclose(dds_dout_fid);

end

MATLAB中的重要应用

恢复matlab原始界面desktop->desktoplayout->default

区分大小写,Inf是无穷大,NaN是不定值

eye()单位矩阵,zeros()全零矩阵,ones()全一矩阵

gridon加网格gridoff不加网格

legend(),figure,holdon保持,holdoff

loglog(x,y),semilogx(x,y),semilogy(x,y)

mean(x)求数组x中所有元素的平均值

axis([02*pi-11]);

1.画图函数

Ø%绘制单位脉冲响应

subplot(221);stem(b_lpf);xlabel('n');ylabel('h(n)');

title('低通滤波器的单位脉冲响应','fontsize',8);%设置字体大小

Ø%求滤波器的幅频响应

m_lpf=20*log(abs(fft(b_lpf)))/log(10);%时域到频域转换

%设置幅频响应的横从标单位为Hz

x_f=[0:

(fs/length(m_lpf)):

fs/2];

subplot(222);plot(x_f,m_lpf(1:

length(x_f)));

xlabel('频率(Hz)','fontsize',8);ylabel('幅度(dB)','fontsize',8);

title('低通滤波器的幅频响应','fontsize',8);

Ø%绘制幅频响应曲线

plot(x_f,m1,'-',x_f,m2,'*',x_f,m3,'+',x_f,m4,'--',x_f,m5,'-.');

xlabel('频率(Hz)');ylabel('幅度(dB)');

legend('矩形窗','汉宁窗','海明窗','布拉克曼窗','凯塞窗');

2.频谱分析函数fvtool

h=fvtool(data(1:

data_len));%%选择前面的8192点分析其频谱,没有图形时可以去掉长度限制

set(h,'Fs',fs,'NormalizeMagnitudeto1','on','FrequencyRange','[0,Fs/2)','NumberofPoints',data_len/2);

3.滤波器函数FDAtool

参考《数字滤波器的MATLAB与FPGA实现》P130

4.数据量化

N=12;%量化位数

%noi=rand(1,length(t));%产生均匀分布的随机序列

noise=randn(1,length(t));%产生高斯白噪声序列

%归一化处理

noise=noise/max(abs(noise));

%12比特量化

Q_noise=round(noise*(2^(N-1)-1));

 

MATLAB的读写文本操作

可以使用Excel进行数值转换:

十六进制转十进制HEX2DEC(),十进制转十六进制DEC2HEX(),二进制转十进制BIN2DEC(),十进制转二进制DEC2BIN()。

eg:

指定转换位数,通过操作与对比,建议使用转换成二进制用于Modelsim进行数据分析,十六进制的转换Excel转换不稳定。

.MATLAB读文本操作

fid=fopen('data.txt','r');

[data,N]=fscanf(fid,'%lg',inf);%读入二进制文件,N是用于计数的

fclose(fid);

fid=fopen('e:

\signal_gen\testbench\dac_data.txt','r');

[dac_data,N]=fscanf(fid,'%d');%读入十进制文件

fcloseall;

2.MATLAB写文本操作

%将生成的数据以十进制数据格式写入txt文件中

fid=fopen('data.txt','w');

fprintf(fid,'%8d\r\n',DATA);

fprintf(fid,';');

fclose(fid);

时序约束

约束实例:

##########################################################################

##assignpackagepins##

##########################################################################

#-------------------------------clock----------------------------------#

NET"sys_clk_153p6_p"LOC=B14|IOSTANDARD=LVDS_33;

NET"sys_clk_153p6_n"LOC=A14|IOSTANDARD=LVDS_33;

NET"dac_clk_153p6"LOC=K14|IOSTANDARD=LVCMOS33;

#------------------------------FPGAreset------------------------------#

NET"rst_n"LOC=AA13|IOSTANDARD=LVCMOS33|IOB=TRUE;

#---------------------------hardwareversion---------------------------#

NET"hw_version[0]"LOC=W15|IOSTANDARD=LVCMOS33;

NET"hw_version[1]"LOC=V16|IOSTANDARD=LVCMOS33;

NET"hw_version[2]"LOC=U16|IOSTANDARD=LVCMOS33;

NET"hw_version[3]"LOC=Y17|IOSTANDARD=LVCMOS33;

#-----------------------------CPUinterface----------------------------#

NET"cpu_wr_n"LOC=K7|IOSTANDARD=LVCMOS33|IOB=TRUE;

NET"cpu_rd_n"LOC=J6|IOSTANDARD=LVCMOS33|IOB=TRUE;

NET"cpu_cs_n"LOC=G3|IOSTANDARD=LVCMOS33|IOB=TRUE;

NET"cpu_addr[0]"LOC=F3|IOSTANDARD=LVCMOS33;

NET"cpu_addr[1]"LOC=L10|IOSTANDARD=LVCMOS33;

#-----------------------------DACinterface----------------------------#

NET"dac_data_p[0]"LOC=A12|IOSTANDARD=LVDS_33|IOB=TRUE;

NET"dac_data_n[0]"LOC=B12|IOSTANDARD=LVDS_33|IOB=TRUE;

#-----------------------------LEDinterface----------------------------#

NET"led_ind"LOC=T3|IOSTANDARD=LVCMOS33|IOB=TRUE;

##########################################################################

##timingconstraint##

##########################################################################

#------------------------------clock---------------------------------#

NET"sys_clk_153p6"TNM_NET="sys_clk_153p6";

TIMESPECTS_clk_153p6=PERIOD"sys_clk_153p6"162MHzHIGH50%;

NET"dac_clk_153p6"TNM_NET="dac_clk_153p6";

TIMESPECTS_dac_clk=PERIOD"dac_clk_153p6"162MHzHIGH50%;

#--------------------------From-Toroute-----------------------------#

#cpu_interface

INST"u_cpu_interface/u_cpu_wr_reg/cpu_data_flg"TNM="CPU_WR_FFs";

INST"u_cpu_interface/u_cpu_wr_reg/cpu_wr_data_reg_?

"TNM="CPU_WR_FFs";

INST"u_cpu_interface/u_cpu_wr_reg/cpu_wr_data_reg_?

?

"TNM="CPU_WR_FFs";

INST"u_cpu_interface/u_cpu_rd_reg/cpu_rd_data_?

"TNM="CPU_RD_FFs";

INST"u_cpu_interface/u_cpu_rd_reg/cpu_rd_data_?

?

"TNM="CPU_RD_FFs";

TIMESPECTS_CPU_WR_FFs=FROM"CPU_WR_FFs"TOFFS20ns;

TIMESPECTS_CPU_RD_FFs=FROMFFSTO"CPU_RD_FFs"20ns;

#--------------------------------end---------------------------------#

XilinxFIFOIPcore使用注意事项

1、almostfull和almostemptyflags用来指示只剩一个字了。

2、Programmablefullandemptystatusflags可以由用户自定义内容设定或者用专用的输入口进行设定。

3、对于V5的blockRAM和built-inFIFO可以使用内嵌的寄存器。

使用这个寄存器可以提高FIFO的性能,但是增加延迟。

4、FIFO常用于:

跨时钟域操作和数据位宽转换。

例如:

两个独立的时钟域,独立的数据位宽,可以利用一个FIFO进行连接,如下图所示:

FIFO可以自动完成数据位宽的转换。

5、当需要用到大块的FIFO时,可以使用V5built-inFIFO

6、First-WordFall-Through(FWFT)特性是指,可以在没有进行读操作的时候,就可以提前知道下一个数据是什么,并且自动将这个数据放到输出数据线(DOUT)上。

FWFT在要求低访问延迟时,很有用。

这几种FIFO支持FWFT特性:

blockRAM,distributedRAM,V5built-inFIFO

7、FIFO接口信号

在写操作时,注意一下几个信号:

(1)、FULL:

当FULL有效时,所有的写操作都将被忽略,并且这时对FIFO的写操作不会对FIFO造成损坏。

(2)、ALMOST_FULL:

当这个信号有效时,说明还可以再进行一次写操作

(3)、FROG_FULL:

当FIFO得数据大于或者等于设定的门限时,这个信号有效;当FIFO得数据小于这个设定的门限时,这个信号无效。

(4)、OVERFLOW:

这个信号用来指示在前一个时钟周期的写请求(WR_EN)被拒绝,因为FIFO已经满了。

(5)

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 军事

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1