- 1、本文档共14页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
PFGA学习
FPGA学习报告
对于FPGA的学习是一个漫长的过程,我现在处于开始阶段。这段时间,我主要是学习了解了Verilog语言以及它与C语言的异同,熟悉了ISE软件的操做流程,做了几个简单的数字电路的仿真,Chipscope部分还不太熟悉。
一,Verilog语言的学习
1.Verilog语言基本了解
Verilog HDL是一种硬件描述语言,用于从算法级、门级到开关级的多种抽象设计层次的数字系统建模。被建模的数字系统对象的复杂性可以介于简单的门和完整的电子数字系统之间。数字系统能够按层次描述,并可在相同描述中显式地进行时序建模。 Verilog HDL 语言具有下述描述能力:设计的行为特性、设计的数据流特性、设计的结构组成以及包含响应监控和设计验证方面的时延和波形产生机制。所有这些都使用同一种建模语言。此外,Verilog HDL语言提供了编程语言接口,通过该接口可以在模拟、验证期间从设计外部访问设计,包括模拟的具体控制和运行。 Verilog HDL语言不仅定义了语法,而且对每个语法结构都定义了清晰的模拟、仿真语义。因此,用这种语言编写的模型能够使用Verilog仿真器进行验证。语言从C编程语言中继承了多种操作符和结构。Verilog HDL提供了扩展的建模能力,其中许多扩展最初很难理解。但是,Verilog HDL语言的核心子集非常易于学习和使用,这对大多数建模应用来说已经足够。当然,完整的硬件描述语言足以对从最复杂的芯片到完整的电子系统进行描述。 Verilog硬件描述语言的主要能力:* 基本逻辑门,例如and、or和nand等都内置在语言中。* 用户定义原语(UDP)创建的灵活性。用户定义的原语既可以是组合逻辑原语,也可以是时序逻辑原语。* 开关级基本结构模型,例如pmos 和nmos等也被内置在语言中。* 提供显式语言结构指定设计中的端口到端口的时延及路径时延和设计的时序检查。* 可采用三种不同方式或混合方式对设计建模。这些方式包括:行为描述方式—使用过程化结构建模;数据流方式—使用连续赋值语句方式建模;结构化方式—使用门和模块实例语句描述建模。* Verilog HDL中有两类数据类型:线网数据类型和寄存器数据类型。线网类型表示构件间的物理连线,而寄存器类型表示抽象的数据存储元件。 * 能够描述层次设计,可使用模块实例结构描述任何层次。* 设计的规模可以是任意的;语言不对设计的规模(大小)施加任何限制。* Verilog HDL不再是某些公司的专有语言而是IEEE标准。* 人和机器都可阅读Verilog 语言,因此它可作为EDA的工具和设计者之间的交互语言。* Verilog HDL语言的描述能力能够通过使用编程语言接口(PLI)机制进一步扩展。PLI是允许外部函数访问Verilog 模块内信息、允许设计者与模拟器交互的例程集合。* 设计能够在多个层次上加以描述,从开关级、门级、寄存器传送级(RTL)到算法级,包括进程和队列级。* 能够使用内置开关级原语在开关级对设计完整建模。* 同一语言可用于生成模拟激励和指定测试的验证约束条件,例如输入值的指定。* Verilog HDL 能够监控模拟验证的执行,即模拟验证执行过程中设计的值能够被监控和显示。这些值也能够用于与期望值比较,在不匹配的情况下,打印报告消息。* 在行为级描述中,Verilog HDL不仅能够在RTL级上进行设计描述,而且能够在体系结构级描述及其算法级行为上进行设计描述。* 能够使用门和模块实例化语句在结构级进行结构描述。* Verilog HDL 的混合方式建模能力,即在一个设计中每个模块均可以在不同设计层次上建模。* Verilog HDL 还具有内置逻辑函数,例如(按位与)和|(按位或)。* 对高级编程语言结构,例如条件语句、情况语句和循环语句,语言中都可以使用。* 可以显式地对并发和定时进行建模。* 提供强有力的文件读写能力。* 语言在特定情况下是非确定性的,即在不同的模拟器上模型可以产生不同的结果;例如,事件队列上的事件顺序在标准中没有定义。
模块的端口表示的是模块的输入和输出名
在模块被引用时,通常有两种方法
方法一:flop flop_d(d1,clk,clrb,q,qn); 模块的端口名必须按序排列
方法二:flop flop_d(.clock(clk),.q(q),.clear(clrb),.qb(qn),.data(d1)); 模块的端口名可以任意排列
模块内容:
A.I/O口说明
输入口: input [信号位宽---1:0] 端口名;
输出口:
文档评论(0)