FPGA学习笔记(1)
fpga工程师基础知识
fpga工程师基础知识FPGA工程师基础知识FPGA(Field-Programmable Gate Array)是一种可编程逻辑器件,具有灵活性和可重构性,被广泛应用于数字电路设计和开发中。
作为一名FPGA工程师,掌握基础知识是至关重要的。
本文将介绍FPGA工程师所需的基础知识,包括FPGA的概念、工作原理、开发流程以及相关工具和技术。
一、FPGA的概念FPGA是一种可编程逻辑器件,它由一系列可编程逻辑门、存储单元和输入/输出接口组成。
与传统的固定逻辑电路不同,FPGA可以根据用户的需求进行编程,实现各种功能和逻辑运算。
FPGA的灵活性使其成为数字电路设计和开发中的重要工具。
二、FPGA的工作原理FPGA的基本单元是可编程逻辑门,如与门、或门、非门等。
这些逻辑门可以通过编程连接起来,形成复杂的逻辑电路。
FPGA中的存储单元用于存储逻辑电路的状态和数据。
通过配置FPGA中的逻辑门和存储单元,可以实现所需的功能。
FPGA的工作原理可以简单描述为以下几个步骤:1. 设计:首先,FPGA工程师需要使用HDL(硬件描述语言)如VHDL或Verilog来描述所需的逻辑电路。
设计包括逻辑电路的功能、输入输出接口和时序要求等。
2. 综合:设计完成后,需要使用综合工具将HDL代码转换为逻辑门级的表示。
综合工具将根据目标FPGA的特性和约束生成逻辑网表。
3. 布局与布线:在布局阶段,将逻辑网表映射到FPGA芯片的物理结构上。
在布线阶段,将逻辑网表中的逻辑门通过可编程连接资源连接起来。
4. 配置:配置是将设计好的逻辑电路下载到FPGA芯片上的过程。
FPGA芯片内部有一块非易失性存储器(通常是SRAM),用于存储逻辑电路的配置信息。
5. 运行:配置完成后,FPGA开始运行用户设计的逻辑电路。
FPGA 的输入和输出通过引脚与外部电路连接。
三、FPGA开发流程FPGA的开发流程通常包括以下几个步骤:1. 确定需求:明确所需的功能和性能要求。
FPGA学习笔记之引脚分配
2021/2/10笔记一:分配引脚的四种方法:〔Quartus II 13.0sp1 (64-bit)〕1、常规方法,利用Pin Planner命令,适用于引脚使用比拟少的工程,简洁方便;2、使用.csv文件进行引脚分配:步骤一:利用记事本新建一个.csv的格式文件,内容格式如图下列图所示,然后保存;步骤二:选择菜单栏Assignments-->Import Assignment,添加刚刚生成的文件路径;步骤三:点击OK,引脚分配完成。
注意:.csv文件保存路径不要有中文,建议保存在工程文件夹下。
3、使用.qsf文件进行引脚分配:步骤一:在Quartus II中翻开.qsf文件〔系统默认生成.qsf文件,默认保存在该工程文件夹下〕步骤二:添加以下格式内容,格式如下列图所示;步骤三:点击保存,引脚分配完成。
4、使用.tcl文件进行引脚分配:步骤一:生成.tcl文件,选择菜单栏Project-->Generate Tcl File For Project,点击OK,默认保存路径为该工程文件夹;步骤二:添加以下格式内容,格式和.qsf文件格式一致;步骤三:选择菜单栏Tool-->Tcl Scripts,选择生成的.tcl文件,点击Run,引脚分配完成。
说明:在实际的应用过程中,我们应该根据工程的子模块个数和引脚的使用多少来选择适宜的引脚分配方式,笔者总结了以下几条:〔不喜勿喷,还望多多赐教〕1、工程中使用的引脚数为个位数时,并且特别少,建议使用常规方法,利用Pin Planner 命令进行引脚分配;2、文件进行引脚分配;如下图,.tcl文件中标识符和变量名已经给出,只需要输入对应引脚,比拟方便。
在多子模块的情况下,.tcl文件中没有给出标识符和变量名,这点需要注意。
3、多个子模块,使用引脚众多的情况下,利用.tcl文件、.csv文件和.qsf文件进行引脚分配大同小异,不过个人更喜欢利用.csv文件进行引脚分配,因为格式相对简单。
小梅哥FPGA学习笔记之Quartus II 15.0中仿真Altera三速以太网IP核
小梅哥FPGA学习笔记之Quartus II 15.0中仿真Altera三速以太网IP核2015年6月19日近期的项目需要用到网络端口通过UDP协议来进行数据的与PC机的交互。
FPGA系统中实现网口有多种方式,包括友晶的DE2-35开发板上使用的NIOS II处理器通过外部MAC芯片DM9000实现的web server,以及DE2-115开发板上使用NIOS II处理器与三速以太网(TSE)IP核实现web server,再就是W5X00系列的硬件TCP/IP网络芯片,配合FPGA实现网络数据传输。
当然,我自己也曾经在项目中直接使用完全自己编写的UDP协议网络收发逻辑配合外部网络PHY芯片,实现数据的收发。
早就知道Quartus II中提供了有三速以太网的MAC层IP,今天,在新项目的网络接口开工前,先通过仿真来了解一下该IP核的基本情况,相信该IP核的仿真结果一定很标准,能够为我后期手动写MAC层逻辑提供一个标准的时序参照。
这里我使用Altera 公司最新的FPGA开发工具Quartus II15.0(前天刚刚出了update1版本,不过公司网速慢,我还没来得及更新)来生成该以太网IP核以及设计实例,并使用Modelsim – Altera来仿真,来得到仿真波形。
在Quartus II15.0中,新建一个空白工程,工程名字任意,这里我命名为TSE_SIM,器件我选择在至芯科技学习时发给我的ZX-1开发板上使用的FPGA芯片EP4CE10C8,仿真工具选择modelsim-altera,语言为Verilog。
(创建工程这些的我就不上图了,相信大家都很熟悉)最终,创建工程完成后的Summary如下图所示:点击Finish完成工程的创建。
在软件的右侧IPCatlog中(以前的博客有提到,Quartus II15.0中的IP核调用不再是在MegaWizard Plug-In Manager中,而是IPCatlog)依次展开Interface Protocols/Ethernet,然后双击Triple-Speed Ethernet,就会弹出下面的对话框:这里,语言选择Verilog,IP核被我自己命名为TSE,然后点击OK,则开始启动参数配置界面,启动过程很长,从点击OK到最终GUI弹出来大约需要20秒左右的时间,大家要耐心点,不要怀疑是否是软件出了故障。
FPGA时序约束学习笔记——IO约束
FPGA时序约束学习笔记——IO约束⼀、参考模型图源来⾃《【抢先版】⼩梅哥FPGA时序约束从遥望到领悟》⼆、参数分析T(0)->(3) = Tclk1T(3)->(4) = TcoT(4)->(5) + T(5)->(6) = TdataT(4)->(5) = Tdata(Init)T(5)->(6) = Tdata(Pcb)T(5)->(6)T(0)->(1) + T(1)->(7) = Tclk2T(0)->(1) = Tclk2(Init)T(1)->(7) = Tclk2(Pcb)(4)->(5)的⾛线是在FPGA芯⽚内部(IC)(5)->(6)的⾛线是在PCB板上(0)->(1)的⾛线是在FPGA芯⽚内部(IC)(1)->(7)的⾛线是在PCB板上计算PCB板上电信号的传输时间,可以将电信号等效为光速,得到的电信号传输时间与长度关系的参数为5555mil/ns1mil = 0.0254mm5555mil/na -> 141.097mm/ns三、建⽴时间余量分析 Slack(Tsu)Data Require Time(数据要求时间) = Tclk2 - Tsu(芯⽚数据建⽴时间) + Latch edge(接收沿) = Tclk2(Init) + Tclk2(Pcb) - Tsu + Latchedge(接收沿)Data Arrival Time(数据到达时间) = Tclk1 + Tco + Tdata + Launch edge(发送沿) = Tclk1 + Tco + Tdata(Init) + Tdata(Pcb) + Launch edge(发送沿)Latch edge(接收沿) - Launch edge(发送沿) = Tclk(因为是⼀个时钟,所以相减就是时钟周期)Slack(Tsu)Data Require Time - Data Arrival Time = (Tclk2 - Tsu + Latch edge) - (Tclk1 + Tco + Tdata + Launch edge)Data Require Time - Data Arrival Time = (Tclk2(Init) + Tclk2(Pcb) - Tsu + Latch edge) - (Tclk1 + Tco + Tdata(Init) + Tdata(Pcb) + Launch edge)Data Require Time - Data Arrival Time = (Tclk2(Init) + Tclk2(Pcb) - Tsu) - (Tclk1 + Tco + Tdata(Init) + Tdata(Pcb)) + TclkData Require Time - Data Arrival Time >= 0Tclk2(Init) - Tclk1 -Tco - Tdata(Init) >= -Tclk2(Pcb) + Tsu +Tdata(Pcb) - Tclk (注:左边是未知量,右边是可知量)Tclk2(Init) - Tclk1 -Tco - Tdata(Init) + Tclk >= -Tclk2(Pcb) + Tsu +Tdata(Pcb)-Tclk2(Pcb) + Tsu +Tdata(Pcb)就是最⼤传输延迟:output delay max = Tdata(pcb) - Tclk2(pcb) + Tsu四、保持时间余量分析 Slack(Th)Data Require Time(数据要求时间) = Tclk2 + Th(芯⽚数据保持时间) + Latch edge(接收沿) = Tclk2(Init) + Tclk2(Pcb) + Th + Latch edge(接收沿)Data Arrival Time(数据到达时间) = Tclk1 + Tco + Tdata + Launch edge(发送沿) = Tclk1 + Tco + Tdata(Init) + Tdata(Pcb) + Launch edge(发送沿)Slack(Th)Data Arrival Time(数据到达时间) - Data Require Time(数据要求时间)同样的,可以算出,最⼩输出延迟Output delay min = Tdata(pcb) - Tclk2(pcb) - Th五、综上所述output delay max = Tdata(pcb) - Tclk2(pcb) + TsuOutput delay min = Tdata(pcb) - Tclk2(pcb) - Th如果,PCB板上的数据⾛线长度与时钟⾛线长度⼀样,即:(5)->(6) = (1)->(7)那么,Tdata(pcb) = Tclk2(pcb)output delay max = TsuOutput delay min = -Th六、步骤设计时钟约束设计输出延迟最⼤延迟最⼩延迟七、时钟与数据反向输出TsuData Require Time = Tclk2(Int) - Tsu + Latch EdgeData Arrival Time = Tclk1(Pcb) + Tclk1(Int) + Tco + Tdata(Pcb) + Tdata(Int) + Lanch EdgeSlack(Tsu) = Data Require Time - Data Arrival TimeSlack(Tsu) = (Tclk2(Int) - Tsu + Latch Edge) - (Tclk1(Pcb) + Tclk1(Int) + Tco + Tdata(Pcb) + Tdata(Int) + Lanch Edge) >= 0 Tclk2(Int) - Tclk1(Int) -Tco - Tdata(Int) >= (Lanch Edge - Latch Edge) + Tsu + Tclk1(Pcb) + Tdata(Pcb)output delay max = Tclk1(Pcb) - Tdata(Pcb) + TsuThData Require Time = Tclk2(Int) + Th + Latch EdgeData Arrival Time = Tclk1(Pcb) + Tclk1(Int) + Tco + Tdata(Pcb) + Tdata(Int) + Lanch EdgeSlack(Th) = Data Arrival Time - Data Require TimeSlack(Th) = (Tclk1(Pcb) + Tclk1(Int) + Tco + Tdata(Pcb) + Tdata(Int) + Lanch Edge) - (Tclk2(Int) + Th + Latch Edge) >= 0(Lanch Edge - Latch Edge) + Tclk1(Pcb) + Tdata(Pcb) - Th >= -Tclk1(Int) - Tco - Tdata(Int) + Tclk2(Int)output delay min = Tclk1(Pcb) + Tdata(Pcb) - Th⼋、IO输出通⽤约束模型分析Tskew = Tclk2 - Tclk1Tskew(Pcb) = Tclk2(Pcb) - Tclk1(Pcb)时钟与数据同向时Tclk1(Pcb) = 0output delay max = Tdata(pcb) - Tclk2(pcb) + Tsu = Tdata(pcb) - (Tclk2(pcb) - Tclk1(Pcb)) + Tsu = Tdata(pcb) - Tskew(Pcb) + Tsu output delay min = Tdata(pcb) - Tclk2(pcb) - Th = Tdata(pcb) - (Tclk2(pcb) - Tclk1(Pcb)) - Th = Tdata(pcb) - Tskew(Pcb) - Th时钟与数据反向时Tclk2(Pcb) = 0output delay max = Tdata(Pcb) + Tclk1(Pcb) + Tsu = Tdata(Pcb) - (Tclk2(Pcb) - Tclk1(Pcb)) + Tsu = Tdata(pcb) - Tskew(Pcb) + Tsu output delay min = Tdata(Pcb) + Tclk1(Pcb) - Th = Tdata(Pcb) -(Tclk2(Pcb) - Tclk1(Pcb)) - Th = Tdata(pcb) - Tskew(Pcb) - Th综上,IO输出约束通⽤公式为output delay max = Tdata(pcb) - Tskew(Pcb) + Tsuoutput delay min = data(pcb) - Tskew(Pcb) - Th。
FPGA学习总结
FPGA学习总结FPGA(现场可编程门阵列)是一种数字电路开发和实现的工具,它提供了一种灵活的方式来设计和实现各种数字电路。
在我的FPGA学习过程中,我经历了以下几个方面的学习和实践:1.FPGA基础知识:在学习FPGA之前,我首先了解了FPGA的基本概念和原理。
我学习了FPGA的架构、时序和时钟设计、数字电路设计和综合等方面的知识。
这些基础知识为我深入学习和实践FPGA打下了坚实的基础。
2. FPGA开发工具的使用:我使用了常见的FPGA开发工具,如Vivado和Quartus。
这些工具提供了一种直观而强大的方式来设计和实现FPGA。
我学习了如何创建项目、添加模块、定义信号、综合和布局布线等操作。
通过不断的实践和尝试,我逐渐掌握了这些工具的使用。
3. Verilog和VHDL的学习:Verilog和VHDL是FPGA开发中常用的硬件描述语言。
通过学习这两种语言,我能够使用它们来描述和设计各种数字电路。
我掌握了如何使用这些语言来描述寄存器、组合逻辑、状态机等部件,并能够将它们综合成FPGA可实现的电路。
4.FPGA的应用实践:在学习了FPGA的基础知识和工具使用之后,我开始进行一些实际的应用实践。
我使用FPGA设计和实现了一些简单的电路,如计数器、加法器、乘法器等。
通过实践,我加深了对FPGA的理解,并增强了自己的设计和调试能力。
5.FPGA高级特性的学习:除了基础知识和工具使用外,我还学习了一些FPGA的高级特性,如时序分析、时钟域划分、并行数据传输和高速串行数据传输等。
这些特性在设计和实现一些高性能和复杂的电路时非常重要,我通过学习和实践,学会了如何正确地使用这些特性。
总结起来,FPGA学习是一个既有理论基础又注重实践和应用的过程。
通过学习FPGA,我更好地理解了数字电路的原理和设计,增强了自己的工程能力。
我学会了使用FPGA开发工具,掌握了Verilog和VHDL等硬件描述语言,实践了FPGA的设计和实现,并学习了一些高级特性。
FPGA设计的八个重要知识点,你都会吗
FPGA设计的八个重要知识点,你都会吗1. 面积与速度的平衡与互换这里的面积指一个设计消耗/的规律资源的数量,对于FPGA可以用消耗的FF(触发器)和LUT(查找表)来衡量,更普通的衡量方式可以用设计所占的等价规律门数。
面积和速度这两个指标贯通FPGA/CPLD设计的时钟,是设计质量的评价的终极标准——面积和速度是一对对立统一的冲突体。
要求一个同时具备设计面积最小、运行频率最高是不现实的。
更科学的设计目标应当是在满足设计时序要求(包括对设计频率的要求)的前提下,占用最小的芯片面积。
或者在所规定的面积下,是设计的时序余量更大、频率跑的更高。
这两种目标充分体现了面积和速度的平衡的思想。
作为冲突的两个组成部分,面积和速度的地位是不一样的。
相比之下,满足时序、工作频率的要求更重要一些,当两者矛盾时,采纳速度优先的准则。
从理论上讲,假如一个设计时序余量较大,所能跑的速度远远高于设计要求,那么就通过功能模块的复用来削减囫囵设计消耗的芯片面积,这就是用速度的优势换取面积的节省。
反之,假如一个设计的时序要求很高,一般办法达不到设计频率,那么普通可以通过将数据流串并转换,并行复制多个操作模块,对囫囵设计实行乒乓操作和串并转换的思想运行。
2. 硬件原则硬件原则主要针对HDL代码编写而言:是采纳了C语言形式的硬件的抽象,它的本质作用在于描述硬件,它的终于实现结果是芯片内部的实际。
所以评判一段HDL代码的优劣的终于标准是:其描述并实现的硬件电路的性能,包括面积和速度两个方面。
评价一个设计的代码水平较高,仅仅是说这个设计是由硬件想HDL代码这种表现形式的转换越发流畅、合理。
而一个设计终于性能,在更大程度上取决于设计工程师所构想的硬件实现计划的效率以及合理性。
(HDL代码仅仅是硬件设计的表达形式之一)初学者片面追求代码的干净、简短,是错误的,是与HDL的标准南辕北辙的。
正确的编码办法,首先要做到对所需实现的硬件电路心中有数,对该部分的硬件的结构和衔接非常清楚,然后再用适当的HDL语句表达出来即可。
FPGA的基本原理(详细+入门)
门阵等效门:一个门阵等效门定义为一个两输入端的“与非”门。 系统门:是芯片上门的总数,是厂家指定给器件的一个门数。
十一、FPGA的封装
1、引脚数:FPGA芯片总的引脚数。 2、用户I/O数:指除了电源引脚、特殊功能引脚外的引脚,这些引脚可根据用户的需要进行配置。 3、 I/O驱动电流:8mA 或10mA。 4、时钟网络数:FPGA芯片可能包含1个、2个或4个时钟网络。 5、封装:PLCC,PQFP,CPGA等封装形式。 6、工作温度范围:FPGA芯片一般有商用、工业用及军用等不同的工作温度范围。 7、工作环境:一般分普通工作环境和航天工作环境。
ACT1模块是如何实现三输入与门的?
2、查表型FPGA结构 两输入与门: 4 X 1 RAM 表:
A
B
C
0
0
0
0
1
0
1
0
0
1
1
1
A1
A0
(二)、 什么是FPGA? FPGA是英语(Field programmable Gate Array)的缩写,即现场可编程门阵。它的结构类似于掩膜可编程门阵(MPGA),由可编程逻辑功能块和可编程I/O模块排成阵列组成,并由可编程的内部连线连接这些逻辑功能块和I/O模块来实现不同的设计。 1、FPGA与MPGA的区别: MPGA利用集成电路制造过程进行编程来形成金属互连,而FPGA利用可编程的电子开关实现逻辑功能和互连。 2、FPGA与CPLD的区别: 1) 结构不同:FPGA是由可编程的逻辑模块、可编程的分段互连线和I/O模块组成,而CPLD是由逻辑阵列块、可编程连线阵列和I/O模块组成。 2) CPLD延时可预测(Predictable),FPGA的延时与布局布线情况有关。 3) CPLD 组合逻辑多而触发器较少,而FPGA触发器多。
《详解FPGA:人工智能时代的驱动引擎》札记
《详解FPGA:人工智能时代的驱动引擎》阅读随笔目录一、FPGA简介 (2)1.1 FPGA的定义与特点 (3)1.2 FPGA的发展历程 (4)1.3 FPGA的应用领域 (5)二、FPGA的工作原理 (7)2.1 FPGA的基本架构 (8)2.2 FPGA的工作模式 (10)2.3 FPGA的编程语言 (11)三、FPGA在人工智能领域的应用 (12)3.1 机器学习与深度学习 (14)3.2 自动驾驶与机器人技术 (15)3.3 无人机与智能物流 (17)3.4 医疗诊断与生物信息学 (18)3.5 其他领域的FPGA应用 (20)四、FPGA的设计与优化 (22)4.1 FPGA设计流程 (23)4.2 硬件描述语言 (25)4.3 设计优化策略 (26)4.4 性能评估与测试 (28)五、FPGA的未来发展趋势 (29)5.1 技术创新与突破 (30)5.2 行业合作与生态系统建设 (32)5.3 应对挑战与机遇 (33)六、结论 (35)6.1 FPGA在人工智能时代的重要性 (36)6.2 未来展望与期许 (37)一、FPGA简介FPGA(现场可编程门阵列)是一种集成电路芯片,它允许设计师在硬件层面上实现可编程的解决方案。
与传统的专用硬件电路相比,FPGA具有更高的灵活性和可扩展性,因此在人工智能、数据中心、通信等领域得到了广泛应用。
FPGA的核心特点是可编程性。
它可以根据需要动态地重新配置内部逻辑单元,从而实现各种功能。
这种可编程性使得FPGA在应对不断变化的应用需求时具有很高的效率。
FPGA还具备低功耗、高性能、高可靠性等优点。
FPGA的发展历程可以追溯到20世纪80年代,当时Xilinx公司推出了世界上第一款商用FPGA产品。
随着技术的不断发展,FPGA的性能不断提高,功能也越来越丰富。
FPGA已经发展到了第四代,即UltraScale系列,其最大容量可达140亿个逻辑单元,支持多种编程语言和开发工具,为人工智能时代的应用提供了强大的支持。
《数字信号处理的FPGA实现》读书笔记
<数字信号处理的FPGA实现>Verilog写状态机大概有这样几点要求:1、组合逻辑完成状态转移的条件判断,时序逻辑完成状态机的状态转移。
2、组合逻辑和时序逻辑分别在两个不同的always块中完成,根据状态机状态通过译码逻辑产生的与状态机无关的逻辑部分不要放在专用的状态机always块中。
3、状态编码预先定义为parameter,状态较少的状态机推荐使用one-hot方式编码,以减小译码逻辑的复杂度,提高性能。
4、建议单独使用一个模块来描述状态机。
5、状态机应有一个default状态,在上电复位的时候作为初始状态。
6、注意状态机组合逻辑中的if...else语句,不要出现latch。
7、对于复杂状态机,最好采用状态机嵌套方式完成。
其实上面很多都是按照Synopsys LEDA的coding style的要求的,状态机的写法相对固定,因此很多Design entry的工具可以自动生成状态机代码,Xilinx也有工具支持直接由状态转移图输入完成状态机的编码。
所以关键还是画好状态转移图,其他就相对简单了。
visual hdl+ISE+synplify Pro+modelsim!1.设计输入1)设计的行为或结构描述。
2)典型文本输入工具有UltraEdit-32和Editplus.exe.。
3)典型图形化输入工具-Mentor的Renoir。
4)我认为UltraEdit-32最佳。
2.代码调试1)对设计输入的文件做代码调试,语法检查。
2)典型工具为Debussy。
3.前仿真1)功能仿真2)验证逻辑模型(没有使用时间延迟)。
3)典型工具有Mentor公司的ModelSim、Synopsys公司的VCS和VSS、Aldec公司的Active、Cadense公司的NC。
4)我认为做功能仿真Synopsys公司的VCS和VSS速度最快,并且调试器最好用,Mentor 公司的ModelSim对于读写文件速度最快,波形窗口比较好用。
fpga自学笔记—设计与验证
文章标题:深入探索FPGA自学笔记—设计与验证1. 引言在当今数字电子技术发展日新月异的背景下,FPGA(Field Programmable Gate Array)作为一种可编程逻辑器件,已经成为了数字电子系统设计中不可或缺的组成部分。
作为一名FPGA自学者,要想真正掌握FPGA的设计与验证,需要深入探索其原理和应用。
本文将结合个人实践经验,从理论到实践,从简单到复杂,深入探讨FPGA自学笔记中设计与验证的要点。
2. FPGA基础知识概述我们需要了解FPGA的基本结构和工作原理。
FPGA由一系列可编程逻辑单元、可编程连通网络和输入/输出模块组成。
当我们在FPGA中设计一个数字电路时,实际上是在配置这些逻辑单元的连接关系,实现特定功能。
了解FPGA的基础知识对于理解设计与验证至关重要。
3. 设计与验证的流程在进行FPGA设计与验证时,我们需要遵循一定的流程。
我们需要对设计进行规划和分析,确定所需功能和性能指标。
在进行RTL (Register Transfer Level)级设计时,需要对数字电路进行建模和仿真,验证其功能和时序约束。
接下来,我们需要将设计综合成逻辑电路,并进行布局布线。
通过验证工具对设计进行仿真和验证,确保其符合预期的功能和性能要求。
4. FPGA设计的关键技术在进行FPGA设计时,有一些关键的技术是不可或缺的。
我们需要掌握Verilog或VHDL等硬件描述语言,以便进行RTL级设计和仿真。
对于复杂的FPGA设计,我们还需要了解时序约束、时钟域划分等关键技术,确保设计的稳定性和可靠性。
5. FPGA验证方法与工具在FPGA设计完成后,验证同样是至关重要的环节。
我们可以利用仿真工具对设计进行功能验证和时序约束验证。
基于FPGA原型验证评台也是一种有效的验证方法,通过将设计加载到实际FPGA硬件中,验证其在实际环境下的功能和性能。
6. 个人观点与理解通过自学FPGA设计与验证的过程,我深刻理解了数字电子系统设计的复杂性和挑战性。
学习FPGA的几点心得五篇
学习FPGA的几点心得五篇第一篇:学习FPGA的几点心得1、首先要明白的是软件设计和逻辑设计的不同,并理解什么是硬件意识。
软件代码的执行是一个顺序的过程,编绎以后的机器码放在存储器里,等着CPU一条一条的取指并执行;因此软件设计中经常会带有顺序处理的思维。
而逻辑设计则不同,我们设计的是数字电路,它是由很多很多的与非门及D触发器构成的,上电之后所有与非门和D触发器都同时工作,不会因为A触发器的代码描述在B触发器之前A触发器就是先工作,事实上,RTL级代码的代码先后顺序在综合成网表文件后这种顺序就消失了,取代的是基本逻辑电路之间的互联关系描述;因此逻辑设计需要的是一种并发的思维,我们也需要用并发的思维去考虑电路的设计。
当然,我们设计的电路功能一般都有先后顺序的关系,如果这种顺序不能通过代码的先后顺序来实现,那么要怎么完成这一功能呢?在逻辑设计中,我们所说的先后顺序都是基于时间轴来实现:它的承载体就是时序逻辑,也就是那些触发器。
2、其次就是要熟悉基本电路的设计。
基本的电路不是很多,也就是D触发器、计数器、移位寄存器、状态机、多路选择器、译码器等几种,所有复杂的电路都可由这些基本的电路构成。
高手水平高的体现并不是他能写出一些很奇特的电路,相反,水平高是体现在他们总能将复杂的电路用这些很朴素的基本电路去描述。
甚至,你会发现他们的代码基本上是由if...else、case这些语句构成的,朴素的让你觉得奇怪。
初学者在入门的时候,对于基本电路的设计应该固定化、标准化,每种电路该用什么样的代码描述,应该要固定、统一,尽量少一些花哨的东西。
说来这里我举个例子。
以前有几个朋友因为仿真有问题请我帮忙找问题。
他们的代码写的很乱,出现了很多种稀奇古怪的电路,一看头都大了,只好建议他们按照标准的电路重新写下代码。
结果过了半天,他们就和我说问题不见了。
所以,高手们喜欢用简单的代码是有道理的,电路的标准化和规范化可以减少许多稀奇古怪的问题,问题少了他们也就能在别人加班的时候回家多睡回觉,呵呵。
FPGA串口UART学习笔记1串口通信
FPGA串⼝UART学习笔记1串⼝通信串⼝通信1、串⼝简介串⾏接⼝,COM接⼝,只需要两根线就能实现两台设备之间的通信。
UART指的是异步的串⾏接⼝,通⽤异步收发。
标准常⽤的是RS-232标准接⼝现在电脑上没有串⼝了,所以使⽤的是USB转串⼝芯⽚,CH340芯⽚。
换句话说,只需要两根数据线UART_RXD和UART_TXD,就能完成两台设备之间的通信。
2、串⼝时序两根数据线各⾃独⽴互不影响,⼆者的时序是相同的。
不同之处是UART_RXD是主机MASTER发送给从机SLAVE,UART_TXD是SLAVE 发送给MASTER。
由于两根线的时序完全相同且独⽴,下⾯以UART_TXD为例。
空闲状态时,UART_TXD⼀直拉⾼,当要传输数据之前,拉低⼀个数据位,此后开始传输数据。
数据之后有⼀个校验位,校验位之后是停⽌位,停⽌位之后进⼊下⼀个传输周期。
⾄此,完成了⼀个数据包的传输。
注意:(1)、传输的数据是从低⽐特位开始传,⽐如101010,接受端的接受顺序是010101。
(2)、传输数据的位数是MASTER与SLAVE约定好的,可以是4、5、6、7、8位,时序图中是以⼋位为例。
(3)、校验位⼀般是奇偶检验。
当然,也可以选择没有检验位,前提是MASTER与SLAVE约定好,在SLAVE解析接收到的数据的时候,不安排校验位的解析。
(4)、停⽌位,停⽌位是保证两段传输之间⼀定要有间隔。
两段传输之间可以没有空闲时间,但是,停⽌位⼀定要有。
3、时间的问题从时序图上可以看出,串⼝的发送和接受是没有时钟的,换句话说,这是⼀个异步时序。
那么如何确定每个位所需要的时间就尤为重要。
这个问题的要点是波特率,每秒发送/接受单位的个数。
我们使⽤的串⼝是以⽐特为单位,所以这⾥波特率与我们的⽐特率相同。
常见的波特率的数值有9600,19200,38400,57600,115200等。
以9600为例,表⽰⼀秒钟发送/接受9600个⽐特。
小梅哥和你一起深入学习FPGA之串口调试(一)
小梅哥和你一起深入学习FPGA之串口调试(一)大家好,这几天在各个论坛上,经常就有人在向我咨询基于FPGA的串口通信代码,大部分都是在网上下载一个现成的代码,但是在使用中就遇到了各种问题,于是就发到了论坛上来求助。
在阅读了他们的代码之后,我发现几乎出自同一个版本(目前确定为特权同学的基于EPM240入门实验的代码)。
他们在调试这个代码的时候,经常存在这样几个问题:1、部分人对该串口通讯模块完全不理解,对每句话,甚至每个模块的功能都不理解;2、部分人采用最原始的画波形的方式来对该模块进行仿真,结果无法得到仿真结果;3、部分人不会使用modelsim对该设计进行仿真;4、绝大部分人不会编写testbench;5、下板测试无法进行正确的字符串收发。
在公司内部,我将这种现象和几位老师交流之后,夏宇闻老师建议我专门针对该代码写一个由原理到代码,由仿真到板级的调试笔记。
争取用最通俗,也是最笨的办法,手把手的教会大家来调试这个代码。
本调试笔记主要由五个部分组成:原始代码分析;原始代码验证;对原始代码进行修改;对修改后的代码进行验证;对修改后的设计进行板级验证。
每个部分,小梅哥都会用图文结合的方式,教大家一步一步的来进行。
一、原始代码分析该代码来自小梅哥最崇拜的大神,特权同学。
当时小梅哥也是看着特权同学的书和视频教程一步一步走过来的。
特权同学的代码实现了单字节的收发测试,没有对连续字节的收发进行测试。
特权同学当时也说过,这个只是一个简单的实验,离实际工业应用还有一定的距离。
考虑到论坛上很多小伙伴都希望能够实现连续字节的收发功能,因此小梅哥就在特权同学的代码上进行了修改。
修改后的代码,输入时钟可以在一定范围内选择任意频率,目前已经支持5种波特率选择(9600、19200、38400、57600、115200),实际小梅哥还做过更高波特率的测试,目前实测在115200波特率的速率下可以实现超过9999999次连续无间断的收发。
Vivado个人学习笔记001_利用clocking
Vivado个⼈学习笔记001_利⽤clocking wizard与计数器完成较⾼精度的分频个⼈原创声明:本⽂为本⼈原创⽂章,未经本⼈允许请勿⽆端转载,转载请注明来源。
由于实际需求,⼯程中经常需要⼀些精度较⾼的频率的时钟,⽐如115.2khz等。
⽽我们初次接触fpga时看到的分频⽅法,也就是最基本的计数分频,⼀般是只有整数倍的分频。
那么如何实现⼀个实际输出波形较为规则的、精度较⾼的时钟信号呢?⾸先先声明我个⼈使⽤的软硬件平台。
由于现在还处于初学阶段,硬件上使⽤的是DIGILENT公司的Arty™ FPGA Board Reference Manual,其使⽤的芯⽚是赛灵思的7a系的Xilinx Artix-35T FPGA (xc7a35ticsg324-1L)。
下⾯是官⽅⽂档的介绍与个⼈实际拍摄的照⽚。
软件则是使⽤的Xilinx的官⽅平台Vivado 2015.4.接下来就步⼊正题。
计数分频原理在各个教材与⽹站上都有详细的说明,代码也有很多现成的,这⾥就不多做赘述。
下⾯介绍⼀下本⽂的重点,IP核clocking wizard(CLK_WIZ).⾸先,在vivado主界⾯左侧的Project Manager⼀栏中打开IP Catalog,搜索clk ,即可找到clocking wizard这个ip核,双击即可点开配置该ip核。
在clocking options中,可以选择MMCM与PLL。
MMCM是混合时钟管理器,PLL即锁相环Phase Locked Loop。
PLL的原理百度⼀下就可以搜到,⾄于这两者的关系,MMCM⼀般来说是包含PLL在内的拥有更多功能的⼀个东西,具体的内容就要看datasheet了,本⼈也没有仔细看过,所以如有不严谨的地⽅请多包涵。
在Input Clock Information中,可以选择输⼊时钟,可以使⽤多个输⼊。
其他的功能如有需求再作调整,本⼈在此就不做过多介绍了。
Xilinx约束学习笔记(一)——约束方法学
Xilinx约束学习笔记(⼀)——约束⽅法学《Xilinx约束学习笔记》为⾃⼰阅读 Xilinx 官⽅ UG903 ⽂档后的学习笔记,⼤多数为翻译得来,⽅便⼤家学习。
1 约束⽅法学1.1 组织约束⽂件Xilinx 建议将时序约束和物理约束分开保存为两个不同的⽂件。
甚⾄可以将针对某⼀个模块的约束单独保存在⼀个⽂件中。
1.1.1 综合和实现可以使⽤不同的约束⽂件可以使⽤ USED_IN_SYNTHESIS 和 USED_IN_IMPLEMENTATION 属性指定约束⽂件是在综合或实现过程中使⽤。
注意:特别是IP、DCP这类使⽤OOC模式的模块,因为这些模块在综合过程中是⼀个⿊盒,当顶层约束指定的约束路径为⿊盒中的内容时,可能在综合过程中会报找不到⽬标的错误。
因此,最好的⽅法是将约束会为两个⽂件,⼀个综合⽤,⼀个实现时⽤。
在⼯程模式中可以使⽤如下代码指定约束⽂件使⽤时机。
set_property USED_IN_SYNTHESIS false [get_files wave_gen_pins.xdc]set_property USED_IN_IMPLEMENTATION true [get_files wave_gen_pins.xdc]⾮⼯程模式中,不需要如此设置。
因为什么时候使⽤约束⽂件,只和读取约束⽂件的时机相关。
如下:其中 wave_gen_timing.xdc 会在综合和实现过程中使⽤,⽽wave_gen_pins.xdc 只会在实现过程中使⽤。
read_verilog [glob src/*.v]read_xdc wave_gen_timing.xdcsynth_design -top wave_gen -part xc7k325tffg900-2read_xdc wave_gen_pins.xdcopt_designplace_designroute_design1.2 约束的顺序推荐约束顺序如下:## Timing Assertions Section# Primary clocks# Virtual clocks# Generated clocks# Clock Groups# Bus Skew constraints# Input and output delay constraints## Timing Exceptions Section# False Paths# Max Delay / Min Delay# Multicycle Paths# Case Analysis# Disable Timing## Physical Constraints Section# located anywhere in the file, preferably before or after the timing constraints# or stored in a separate constraint file1.3 创建综合约束Vivado 综合将设计中的 RTL 描述转换为⼯艺映射⽹表。
fpga知识点
fpga知识点
FPGA(Field-Programmable Gate Array),即现场可编程门阵列,是
在PAL、PLA和CPLD等可编程器件的基础上进一步发展起来的一种更
复杂的可编程逻辑器件。
它是ASIC领域中的一种半定制电路,既解决
了定制电路的不足,又克服了原有可编程器件门电路有限的缺点。
FPGA的基本结构包括可编程输入输出单元、可配置逻辑块、数字时钟
管理模块、嵌入式块RAM、布线资源、内嵌专用硬核、底层内嵌功能单元。
FPGA的设计流程包括算法设计、代码仿真以及设计、板级调试,设计
者根据实际需求建立算法架构,利用EDA建立设计方案或HDL编写设
计代码,通过代码仿真保证设计方案符合实际要求,最后进行板级调试,利用配置电路将相关文件下载至FPGA芯片中,验证实际运行效果。
由于FPGA需要被反复烧写,它实现组合逻辑的基本结构不可能像ASIC 那样通过固定的与非门来完成,而只能采用一种易于反复配置的结构,查找表(Look Up Table,LUT),可以很好地满足这一要求。
LUT实质就是一个RAM,由布尔代数理论可知,对于一个n输入的逻辑运算,最多产生2^n个不同的组合。
所以,如果预先将相应的结果保存在一个
存储单元中,就相当于实现了与非门电路的功能。
以上信息仅供参考,建议查阅专业书籍或者咨询专业人士了解更多信息。
fpga自学笔记——设计与验证
fpga自学笔记——设计与验证FPGA(现场可编程门阵列)是一种集成电路(IC)设备,可通过重新编程实现不同电路的功能。
在现代电子行业中,FPGA被广泛应用于计算机硬件开发、通信系统、控制器和许多其他应用领域。
本篇自学笔记将涵盖FPGA的设计与验证的基本概念和技术。
一、FPGA设计流程FPGA的设计流程包括硬件描述语言(HDL)编写、仿真验证、综合、实现和验证。
以下是FPGA设计流程的详细步骤:1.硬件描述语言编写:FPGA设计通常使用硬件描述语言进行编写,如VHDL(硬件描述语言)或Verilog。
这些语言可以描述出FPGA中各个组件的逻辑和连接关系。
2.仿真验证:对设计进行仿真验证是FPGA设计流程的重要一步。
利用仿真工具,可以检查设计是否满足规范,并进行功能验证。
仿真验证可以帮助发现和解决设计中的问题。
3.综合:综合是将设计转换为FPGA的可编程逻辑单元(PLU)的过程。
综合工具将HDL代码转换为逻辑门电路,并生成一个逻辑网表作为输入。
4.实现:实现是将逻辑网表转换为FPGA器件的过程。
这个过程包括将逻辑网表分配到实际的逻辑单元和I/O资源,进行布线以及生成配置文件。
5.验证:验证是确保设计在FPGA上正常运行的过程。
通常这一步会通过连接实际的外设和运行测试程序来验证设计的功能和性能。
二、FPGA设计与验证工具在FPGA设计与验证中,有许多工具可供选择,如:1.设计工具:FPGA设计工具是用于编写和组织HDL代码的软件。
常用的设计工具包括Xilinx的Vivado和ISE,以及Altera(现在是英特尔)的Quartus II。
这些工具提供了综合、实现和验证的功能。
2.仿真工具:仿真工具用于验证设计的正确性和性能。
常用的仿真工具包括ModelSim、VCS和NC-Verilog等。
这些工具可以模拟设计的行为,并生成波形图以进行分析。
3.布线工具:布线是将逻辑网表分配到FPGA器件中的实际逻辑单元和I/O资源的过程。
fpga,学习心得体会
fpga,学习心得体会篇一:FPGA学习心得大报告《FPGA技术基础》学习报告--课程内容学习心得姓名:学号:年级专业:指导教师:瞿麟 XX10401128 自动化101薛小军摘要从开始学FPGA到此刻粗略算来的话,已经有3个多月了,就目前而言,我并非确信自己算不算高手们所说的入门了,FPGA学习总结。
可是不管此刻的水平如何,此刻就总结一下自己学习它的感受或一些熟悉吧。
关键词FPGA DE2板 QuartusII软件 Verilog语言引言FPGA是什么?FPGA现状?如何学习FPGA?FPGA是现场可编程门阵列的简称,FPGA的应用领域最初为通信领域,但目前,随着信息产业和微电子技术的进展,可编程逻辑嵌入式系统设计技术已经成为信息产业最热点的技术之一,应用范围遍及航空航天、医疗、通信、络通信、安防、广播、汽车电子、工业、消费类市场、测量测试等多个热点领域。
并随着工艺的进步和技术的进展,向更多、更普遍的应用领域扩展。
愈来愈多的设计也开始以ASIC转向FPGA, FPGA正以各类电子产品的形式进入了咱们日常生活的各个角落。
正文(1)把握FPGA的编程语言在学习一门技术之前咱们往往从它的编程语言开始,犹如窗习单片机一样,咱们从C语言开始入门,当把握了C语言以后,开发单片机应用程序也就不是什么难事了。
学习FPGA也是如此,FPGA的编程语言有两种:VHDL和Verilog,这两种语言都适合用于FPGA的编程。
(2)FPGA实验尤其重要除学习编程语言之外,更重要的是实践,将自己设计的程序能够在真正的FPGA里运行起来,这时咱们需要选一块板子进行实验,咱们选择利用DE2板才进行实验。
初识DE2开发板DE2的资源DE2的资源超级丰硕,包括1. 核心的FPGA芯片-Cyclone II 2C35 F672C6,从名称能够看出,它包括有35千个LE,在Altera的芯片系列中,不算最多,但也绝对够用。
Altera下载操纵芯片- EPCS16和USB-Blaste对Jtag的支持。
FPGA 技术培训学习总结与实验心得
4
FPGA 技术培训学习总结与实验心得
VRAM水 平 地 址 0x11 ......................
0x00 0x000000 V . R . A . M . 垂 . 直 . 地 . 址 . 0x101111 0, 0
FPGA 技术培训学习总结与实验心得
——对 VGA 实验电路的改进
姓 名:段
磊
日 期:2007/4/20
FPGA 技术培训学习总结与实验心得
目
录
1. 学习感受........................................................................................................................................1 2. 对VGA实验电路的改进 .................................................................................2 2.1 VGA接口 ..............................................................................................................................2 2.2 系统实现...............................................................................................................................3 2.3 VHDL程序设计....................................................................................................................5 2.4 NIOS程序设计 .....................................................................................................................9 2.5 实验结果.............................................................................................................................12 3. 致谢..............................................................................................................................................13 4. 参考文献......................................................................................................................................13
FPGA学习资料
1.18 查找表的原理与结构?
查找表(look-up-table)简称为 LUT,本质上是一个 RAM。目前 FPGA 中多使用 4 输 入的 LUT,所以每一个 LUT 可以看成一个有 4 位地址线的 16x1 的 RAM。 当用户通过原 理图或 HDL 语言描述了一个逻辑电路以后,PLD/FPGA 开发软件会自动计算逻辑电路的所 有可能的结果,并把结果事先写入 RAM,每输入一个信号进行逻辑运算就等于输入一个地 址进行查表,找出地址对应的内容,然后输出。
电平敏感的存储期间称为锁存器。 可分为高电平锁存器和低电平锁存器, 用于不同时钟 之间的信号同步。 由交叉耦合的门构成的双稳态的存储原件称为触发器。分为上升沿触发和下降沿触发。 可以认为是两个不同电平敏感的锁存器串连而成。前一个锁存器决定了触发器的建立时间, 后一个锁存器则决定了保持时间。
1.11 FPGA 芯片内有哪两种存储器资源?
1.19 ic 设计前端到后端的流程和 eda 工具?
设计前端也称逻辑设计,后端设计也称物理设计,两者并没有严格的界限,一般涉及到 与工艺有关的设计就是后端设计。 1:规格制定:客户向芯片设计公司提出设计要求。 2:详细设计:芯片设计公司(Fabless)根据客户提出的规格要求,拿出设计解决方 案和具体实现架构,划分模块功能。目前架构的验证一般基于 systemC 语言,对价后模型 的仿真可以使用 systemC 的仿真工具。例如:CoCentric 和 Visual Elite 等。 3:HDL 编码:设计输入工具:ultra ,visual VHDL 等 4:仿真验证:modelsim 5:逻辑综合:synplify 6:静态时序分析:synopsys 的 Prime Time 7:形式验证:Synopsys 的 Formality.
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
笔记(一)1.声明模块时输入变量(input)必须是是wire型变量,输出变量(output)可以是wire型变量也可以使用reg型变量2.reg型变量必须在always块中赋值,wire型变量只在assign中赋值3.if(!rst_n)等价于if(rst_n==0)//需要仔细体会4.声明端口时可以把放在内部也可以放在外部。
例:基于接口名称的模块例化(推荐)module cnt(input wire sclk,intput wire rst_n,input wire [7:0] d,output reg [7:0] q);endmodule基于顺序的模块例化(不推荐)module cnt (sclk,ret_n,d,q);input sclk, rst_n;input wire [7:0] d;output reg [7:0] q;endmodule总结:推荐使用新规范5.begin...end在RTL代码中仅仅可以理解为“()”的意思,在在多条语句同时执行时必须要加;而在行为级仿真(编写tb脚本文件)时则表示顺序执行6.一般低电平有效用“_n”或者“_b”来表示,例:rst_n表示低电平复位7.一般的时钟、信号、模块名可以使用简写更明确地定义,例:system_clock(系统时钟),可以简写为送sclk8.initial块中只能对寄存器变量进行赋值,一上电只执行一次9.例化模块的时候如果原始模块是输出信号,那么括号内必须是wire型变量;如果原始信号是输入信号,括号内可以是wire型变量也可以是reg型变量10.编写Verilog和testbench时可以直接使用文本文件进行编写,只需将后缀写改为.v即可,打开Modelsm时需要首先新建一个工程,然后将两个都添加进来笔记(二)1.对多条语句进行赋值时需要使用begin...end语句将其包含在内2.case(一个控制选择多个输入端输出)在电路上对应一个编码器或者一个译码器,相对于if...else(每一个if...else会生成一级寄存器)速度上要快很多3.不同功能的寄存器分开always块来写,这样代码的可维护性强,可读性强4.再设计硬件电路时心中要有一个大体电路的结构描述,包括对寄存器和各种电路模块的理解5.initial初始化的目的一上电就执行一次6.case语句后一定不要忘记加default,否则会产生不必要的电路或者错误7.alway后的敏感列表必须要完整(赋值语句右边的变量要加全),否则会生成锁存器(危害极大,延时时间不固定,布线规则不固定,使时序约束无法分析)8.芯片中的为了能产生较短的延时时钟的布线一律采用金线9.关于task任务:做一些协议或用testbench产生一些数据时使用十分方便任务的定义:task send_data(len); //任务的声明integer len, i; //变量声明区begin //必须加begin和endfor(i = 0; i < len; i = i + 1) begin //循环语句@(posedge sclk); //for语句中必须有延时,否则i加满后自动清零,使之没有数据i_addr <= i[7:0];i_data <= i[7:0];endi_addr <= 0;i_data <= 0;endendtask任务的调用:send_data(100);笔记(三)1.有限状态机(FSM):因为FPGA是并行处理的,想要做一些前后顺序的事件处理的时候引入的状态机制2.有限状态机是由寄存器组和组合逻辑构成的硬件时序电路;其状态(即由寄存器组的0和1组合状态所构成的有限个状态)只能在同一时钟跳变沿的情况下才能从一个状态转向另一个状态;究竟转向哪一状态不但取决于各输入值,还取决于当前状态;状态机可用于产生在时钟跳变沿时刻开关的复杂的控制逻辑,是数字逻辑的控制核心3.流水线:在组合逻辑中插入寄存器,把一个本身是组合逻辑处理的事件,分成几个寄存器段来进行处理4.在写状态机时要先画状态迁移图5.一般在描述状态机时选择用两段式较好,其中一个always模块采用同步时序的方式描述状态转移;另一模块采用组合逻辑的方式判断状态转移条件,描述状态转移规律(状态的输出)6.独热码:每一个状态用一个bit表示,独热码占用寄存器数量多,但是组合逻辑资源较少,较适用于状态机的编码。
例:if(state==4'b0001)综合器会优化为if(satate[0]==1'b1),由四位比较转化为一位比较,所以是高速的7.使用parameter定义状态的编码8.Verilog语言对大小写敏感和VHDL语言不同9.后仿真:带有器件的延时文件的仿真10..vo是网表;.sdo是标准延时文件11.状态机代码编写思路:首先要读懂状态迁移图,确定输入、输出以及状态的个数,大概需要几位对状态进行编码;写代码首先把输入、输出定义好;对状态进行编码;采用两段式进行描述第一段写状态的转换(用case语句),第二段写状态的输出(用if...else语句)笔记(四)1.声明变量是要统一放在接口区的下面2.位拼接符:{7’b1010_000,3’b010}转换为10’b1010_000_010;可以实现移位的功能:a=4’b1010;{0,a[3:1]}转换为4’b0101;相当于右移了一位3.在always块中的组合逻辑使用非阻塞赋值和阻塞赋值所生成的电路没有差别,但是为了统一推荐使用非阻塞赋值4.always块中写组合逻辑式敏感列表一定要写全:可以在使用*,表示全部的都包含;条件列表里的所有变量,以及赋值语句右边的所有变量5.端口输出最好加一级寄存器,可以优化时序6.关于存储器变量的声明:reg [7:0] mem8x16 [15:0];//声明位宽为8位,深度为16的memory变量7.Modelsim GUI仿真流程:打开Modelsim软件,建一个工程文件夹,建立Modelsim仿真工程;在用户窗口界面加入需要仿真的多有代码和库文件;编译所有文件;选择testbench顶层文件启动仿真;选择所要观察的目标信号,并将其加入到波形观察窗口,如需更改bus显示数据格式还需要进一步设置。
如进制转换,模拟波形切换;设置仿真运行时间,启动仿真波形绘制;如果下一次启动有其他文件更改或者删除还需要重复以上步骤的部分或者全部。
8.Modelsim do文件的自动化仿真建立库;映射库到物理目录;编译源代码;启动仿真器;执行仿真。
9.vlib:创建库(就是创建文件夹)。
格式vlib<library name>,默认库的名字为work。
示例:vlib work10.vmap:映射逻辑库名,将逻辑库名映射库路径。
语法格式vmap work<library name>。
示例:vlib work work11.vdir:显示指定库的内容。
语法格vlib-lib<library name>。
示例:vdir-lib work12.vlog:编译Verilog源代码,库名缺省编译到work本地库,文件按顺序编译。
语法格式vlog-work<library name> <file1>.v <file2>.v。
示例:vlog-work lpm 220model.v13..do文件的注释符号为’#’14.Modeslim是不识别中文的,输入或者显示中文注释都会是乱码15.直接在Moedlsim的命令行里输入或者写到文本里quit -sim(退出当前仿真功能),.main clear(清楚命令行显示信息)16.vlog -work work ./../design/*.v #../表示上一层目录,/*.v用通配符(*)表示添加所有的.v文件17.vsim -voptargs=+acc work.tb_ex_shift_reg #启动仿真(启动顶层);voptargs=+acc设置优化参数启动仿真,该优化参数不会优化内部的信号(记住该通用方法)笔记(五)1.在Quartus中调用IP核时最好新建一个存储IP核的文件夹,文件夹名字最好命名为ipcore_dir(和ISE中自动新建的文件夹的名字一样)2.Altera中的PLL是模拟的锁相环和Xinlinx中的DCM是有差别的,模拟锁相环的优点是输出的稳定度高、相位连续可调、延时连续可调;缺点是当温度过高或者电磁辐射过强时会失锁3.PLL的操作模式有四种(可参考器件手册查找了解)。
(1)In normal mode(普遍正模式):仅时钟在进入管脚时和到达芯片芯片内部第一级寄存器时的相位相同,但是输出时的时钟相位无法保证相同(最好不要用作于输出);(2)In source-synchronous compensation Mode(源同步补偿模式):使得进入管脚时的数据和上升沿的相位关系与到达芯片内部第一级寄存器时数据和上升沿的相位关系保持不变(通过调整内部的布局布线延时做到的,用于数据接口,特别是高速的情况下);(3)In zero delay buffer mode(零延时模式):对外输出的时钟和参考时钟同相位(更适合于时钟的外部输出);(4)With no compensation(无任何补偿):因为没有任何补偿,所以会由延时产生的相移4.PLL原理:PLL是一个反馈系统,首先需要参考时钟(ref)通过鉴频(FD)鉴相器(PD)和需要比较的时钟频率进行比较,相等输出0;如果参考时钟频率大于需要比较的时钟频率时输出一个变大的成比例的值;如果参考时钟频率小于需要比较的时钟频率时输出一个变小的成比例的值。
然后输出的比例值送入一个环路滤波器(控制噪声的带宽),起到平滑作用(滤掉高频噪声。
使之稳定在一个值)。
最后将输出的稳定的值控制压控振荡器(VCO),也就是环路滤波器输出的电压越大VCO输出频率越高,再将这个信号连接鉴频鉴相器作为需要比较的频率。
当倍频是在VCO后直接加一级分频器,在分频器前输出的信号即为倍频后的信号;当分频时在ref后直接加一级分频器,在VCO后输出5.PLL设置中时钟相位要调整相位移动90度6.RAM:用于跨时钟域的处理(从慢时钟域到快时钟域的处理或者从快时钟域到慢时钟域的处理)笔记(六)1.做DDS首先要等间隔取离散的采样点,遵循采样定理。
(1)将连续的正弦波信号离散化(应用Matlab软件进行实现);(2)将离散化后的正弦波一个整周期存储到Ram中(将离散后的数据进行定点化,Ram的规格是256x8,数据规格1bit符号位和7bit小数位;创建一个Ram用于存储离散数据)。