CPLD与Verilog简介(3)

2019-08-29 00:32

年被推向公众领域。 Open Verilog International (OVI)是促进Verilog发展的国际性组织。1992年, OVI决定致力于推广Verilog OVI标准成为IEEE标准。这一努力最后获得成功,Verilog 语言于1995年成为IEEE标准,称为IEEE Std 1364-1995。完整的标准在Verilog硬件描述语言参考手册中有详细描述。 下面列出的是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 还具有内置逻辑函数,例如&(按位与)和|(按位或)。

* 对高级编程语言结构,例如条件语句、情况语句和循环语句,语言中都可以使用。 * 可以显式地对并发和定时进行建模。 * 提供强有力的文件读写能力。

* 语言在特定情况下是非确定性的,即在不同的模拟器上模型可以产生不同的结果;例如,事件队列上的事件顺序在标准中没有定义。

四、CPLD开发

这部分介绍由CPLD完成电路的方法和过程。 1. 静态LED数码管显示

数码管LED显示是工程项目中使用较广的一种输出显示器件,常见的数码管有共阴和共阳2种,共阴数码管是将8个发光二极管的阴极连接在一起作为公共端,而共阳数码管是将8个发光二极管的阳极连接在一起作为公共端,公共端我们常称作位码,而其它的8位我们称作段码(我们选用的是共阳数码管)。而按驱动方式可以分成静态和动态显示两种方式,这两种显示方法都可以用CPLD来控制实现,它也将和使用单片机一样简单。

11

要求:在001181092-Xilinx实验仪的LED数码管上依次显示0~9、A~F十六个字符。 程序设计:文件名exe3.v。

module exe3(clock,seg,sl); //定义模块结构 module exe3(clock,seg,sl,slin);

input clock; //定义输入时钟引脚

output [7:0] seg; //定义数码管段输出引脚,段码 output [3:0] sl; //定义数码管选择输出引脚,位码

reg [7:0] seg_reg; //定义数码管段输出寄存器 reg [3:0] sl_reg; //定义数码管选择输出寄存器 reg [3:0] disp_dat; reg [27:0] count;

always@(posedge clock) begin

//if (count[27:24]==4’b1010 ) //count=0; //else

count=count+1; end always

begin

sl_reg=4'b0000;

end

always@(count[16]) begin

disp_dat=count[27:24]; end

always@(disp_dat) begin

case(disp_dat) 4'h0:seg_reg = 8'hc0; 4'h1:seg_reg = 8'hf9; 4'h2:seg_reg = 8'ha4; 4'h3:seg_reg = 8'hb0; 4'h4:seg_reg = 8'h99; 4'h5:seg_reg = 8'h92; 4'h6:seg_reg = 8'h82; 4'h7:seg_reg = 8'hf8;

4'h8:seg_reg = 8'h80; //定义显示数据寄存器 //定义计数器寄存器 //定义clock信号上升沿触发 //计数器值加1 //always@(slin)

//4个LED数码管都选中 //sl_reg=slin;

//定义显示数据触发事件 //若显示的数据 //显示数码输出 //选择输出数据 //显示0 //显示1 //显示2 //显示3 //显示4 //显示5 //显示6 //显示7 //显示8 12

end

4'h9:seg_reg = 8'h90; //显示9 4'ha:seg_reg = 8'h88; //显示a 4'hb:seg_reg = 8'h83; //显示b 4'hc:seg_reg = 8'hc6; //显示c 4'hd:seg_reg = 8'ha1; //显示d 4'he:seg_reg = 8'h86; //显示e 4'hf:seg_reg = 8'h8e; //显示f

endcase

assign seg=seg_reg; //输出数码管解码结果

//assign seg[7]=!seg_reg[7]; //assign seg[6:0]=seg_reg[6:0];

assign sl=sl_reg;

endmodule 管脚锁定见表6 表6 管脚锁定方法

//输出数码管选择

通过软件的管脚锁定将段码线seg0~seg7分别与芯片的1~7、10管脚相连,而位码线sl0~sl3分别与芯片的81~84管脚相连,clock与9管脚相连。程序中,位码线sl0~sl3上一直输出低电平“0”,四个PNP三极管导通即4个数码管都被选中;因为4个LED数码管的段码线分别接到了同一管脚上,则4个数码管将显示相同的数码,4个动态的LED数码管变成了静态的LED。将下载电缆的两端分别接到PC机和001181092实验仪的JTAG下载口上,打开工作电源,执行下载命令将程序下载到001181092实验仪的XC95108器件中。实现的计数器显示的并不是标准时间,算出来的时间间隔为:

224?

1?1.517s,所以当你想更改计数器显示快慢程度时,可以通过更改程序

11.05920?1000000中显示数据的位数;低位时时间间隔变短,高位时时间间隔变长。 2. 抢答器的设计

要求:在001181092-Xilinx实验仪上完成抢答器的功能 程序设计:文件名exe1.v。

module exe1(Set,inA,inB,inC,Q1,Q2,Q3,Seg); //模块名(输入管脚与输出管脚)

input Set,inA,inB,inC;

output Q1,Q2,Q3; //开始定义输入输出管脚

13

//output [7:0] Seg; //被注释的语句实现数码管显示抢答信息

wire inAA,inBB,inCC; //定义连线类型

reg Q1,Q2,Q3; //寄存器输出,用Seg时锁定在81-83pin

//assign Seg=8’h00;

//抢答者相应的数码管八段全亮

assign inAA = !inA; /*将输入取反,使得上升沿有效(因为实验仪上的开 关摁下得到的是负脉冲,而实际电路是正脉冲有效,为了实际与理论联系起来,故作这样定义)*/ assign inBB = !inB; assign inCC = !inC;

always@(posedge inAA or negedge Set) //每次输入或者清零端下降沿到来时,下面步骤顺序发生 begin

if(Set==0)

Q1 = 1; //Set下降沿置1,二极管不能发光,达到清零效果 else if((Q2==1)&&(Q3==1))

Q1 = 0; //Set不起作用并且其它两个二极管不发光时,本二极管发光 end

always@(posedge inBB or negedge Set) begin if(Set==0) Q2 = 1;

else if((Q1==1)&&(Q3==1)) Q2 = 0; end

always@(posedge inCC or negedge Set) begin if(Set==0) Q3 = 1;

else if((Q1==1)&&(Q2==1)) Q3 = 0; end endmodule

按照第二部分WebPACK软件使用的介绍:

● 双击WebPACK软件快捷图标进入ISE集成开发环境,新建工程项目文件exe1.npl并在该项目下新建 Verilog源程序文件exe1.v,输入上面的源程序代码并保存在整个项目文件。实验例程存放在D:\\Xilinx\\bin\\exe1子目录下。

● 然后对工程项目中使用的引脚进行合理的分配和锁定,双击进程窗口中的Assign Pins(ChipViewer)命令进入管脚锁定窗口,按如表4所示的对应关系对各管脚进行正确配置并保存此配置。 表4 管脚锁定方法 Pin 24(83) 25(82) 26(81) Node Name Q1 Q2 Q3 Pin 66(61) 65(58) 63(57) 62(56) Node Name Set inA inB inC 14

● 对该工程文件进行编译处理,若在编译过程中发现错误,找出并更正错误直至编译成功为止。 ● 最后拿出下载电缆并将此电缆的两端分别接到PC机和001181092实验仪的JTAG下载口上,打开工作电源,执行下载命令把程序下载到001181092实验仪的XC95108器件中。

● 观察发光管的两灭状态,上电初时D6、D7、D8都亮;S5(Set)摁下,清零全灭;S6(inA)摁下,D6亮;S7(inB)摁下,D7亮;S8(inC)摁下,D8亮。在有灯亮时,抢答无效。

由前面的程序可以看出:

(1) Verilog-HDL程序是由模块构成的,每个模块的内容都是嵌在module和endmodule两个语句之间,每个模块实现特定的功能,模块是可以进行层次嵌套的;

(2) 每个模块要进行端口定义,并说明输入,输出口(input,output),然后对模块的功能进行逻辑描述; (3) Verilog-HDL程序的书写格式自由,一行可以写几个语句,一个语句可以分多行写; (4) 除了endmodule语句外,每个语句和数据定义的最后必须有分号;

(5) 可以用/*??*/或//??对Verilog—HDL程序的任何部分作注释,一个好的有使用价值的源程序都应当加上必要的注释,以增强程序的可读性和可维护性。

(6) Verilog-HDL对大小写敏感,空格很重要,是用来界定各个标志的,关键字都是以小写形式表示。 过程赋值语句(always)只能对寄存器型的信号,如程序中的Q1,Q2,Q3均为reg型;而连续赋值(assign)语句中,信号不能为寄存器型。

从上所述可知,Verilog程序的基本结构是有一套模块构成。每个模块都是由两部分组成,一部分描述接口,另一部分描述逻辑功能。模块既可用“行为描述”,也可用“结构描述”,或者两者都有。一个模块的结构如下:

module<模块名>(<端口列表>) <端口属性定义,如input,output等> <模块所用到的数据类型>

<逻辑功能定义>这一部分是模块设计中的最重要的部分,它可用三种方法定义: (1)用关键字assign定义语句: 如assign{cout,sum)=ina+inb+cin;

这种方法的语句很简单,只需写一个关键字assign,后面加上一个方程即可。再比如我们要描述一个由二输入a,b的与门,输出为L,则可写为:assign L=a&b;采用“assign”语句是描述组合逻辑最常用的方法之一。 (2)用实例元件

如and and_inst(q,a,b);

采用实例元件的方法相当于在画电路图时从库元件中调用某一已知的元件一样,这里只需要键入元件的名字和相连的引脚即可。要求每个实例元件的名字必须是唯一的。 (3)用always块

如:always@(posedge clk or clr) begin if(clr) q<=0; else if(en) q<=d; end

“always”块既可用于描述组合逻辑也可描述时序逻辑。上面的例子用“always”块生成了一个带有异步清除端的D触发器。“always”块可用于很多种描述手段来表达逻辑,例如上例中就用了if…else语句来表达逻辑关系。按一定的风格来编写“always”块,可以通过综合工具把源代码自动综合成用门级结构表示的组合或时序逻辑电路。

用Verilog模块实现一定功能,应该清楚哪些是同时发生的,哪些是顺序发生的。上面三种方法描述的

15


CPLD与Verilog简介(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:收付清算岗位资格准入考试复习要点(修改)

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: