2023年Verilog所有知识点_第1页
2023年Verilog所有知识点_第2页
2023年Verilog所有知识点_第3页
2023年Verilog所有知识点_第4页
2023年Verilog所有知识点_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Verilog基础:

1.间隔符:空格(\b),Tab(\t),换行符(\n),换页符。

。2.注释:/**///

。3.标记符,关键词:标记符由英文字母、数字、$符、下划线组成,以英文字母或下划。

。线开头。

4.逻辑值:0:逻辑假1:逻辑真。x或X:不拟定状态。z或Z:高阻态

5.常量:<1>格式:<+/-><位宽>,<基数符号><数值>

b/o/d/h:二、八、十、十六进制

<2>数字可加下划线8b1001_1001表达8位二进制数10011001

<3>科学计数:5E-4:5*10A4

<4>运用参数定义语句来定义一个标记符表达常量:parameter参数名1=

常量1,参数名2=常量2;

例:parameterBIT=1,BYTE=8;

6.字符串:双撇号内的字符序列,不能分多行书写,表达式或赋值语句中字符串要换

成。无符号整数,用8位ASCII码表达,一个8位ASCII码表达一个字

变量的数据类型:

1.线网(nettype)类型:线网类被定义后若没有被元件驱动,则默认值为高阻态

关键词:wire:wire[n—1:0]变量名1,变量名2,…,变量

名n;

除wire外尚有wand、wor、tri、triand,trior、trire

g

2.寄存器类型:

寄存器型变量只能在initial或always内被赋值,没被赋值默认为x状态。

4种类型的寄存器变量:<l>reg:行为描述中对寄存器型变量说明

<2>integer:32位有符号整数型

<3>real:64位有符号实型变量(默认值是0)

<4>time:64位无符号时间型

@reg:格式:reg[n・l:0]变量名1,变量名n;

例:integercounter;

initial//initial是过程语句结构,赋值给寄存器类型变量

counter=-l;

③rea1:通常用于对实数型常量进行储存运算

例:realde1ta;

initia1

begin

de1ta=4elO;

delta=2.13

end

integeri;

initiali=deIta;//i得到的值为2

©time:重要用于储存仿真时间,只储存无符号整数,常调用系统函数$lime

例:timecurrent_time;

initial

current_time=$time;

Veri1og基本结构

modu1e模块名(端口名1,端口名2,…)

端口类型说明(input,output,inout)//inout是双向端口

参数定义;〃将常量用符号常量代替,非必须结构

数据类型定义(wire,reg等)

实例化底层模块和基本门级元件;

连续赋值语句(assign);

过程块结构(initia1和always);

行为描述语句;

endmodu1e

描述方式:①结构描述方式:调用其他已定义好的底层模块对整个电路进行描述,或直。

接调用基本门级元件描述。

②数据流描述方式:使用连续赋值语句对电路逻辑功能进行描述。

③行为描述方式:使用过程块语句结构(iniiia1,always)»

组合逻辑电路门级建模

基本门级元件:and:多输入与门or:多输入或门xor:多输入异或门

buf:多输出缓冲器bufifl:高电平有效三态缓冲器

bufifO:低电平有效三态缓冲器

nand:多输入与门nor:多输入或非门xnor:多输入异或非门

not:多输入反相器notifl:高电平有效三态反相器

notifO:低电平有效三态反相器

①多输入门:andA1(out,in1,in2,in3);

②多输出门:bufB1(outl,out2,•••,in);

③三态门:bufiflB1(out,in,ctri);

notif1N1(out,in,Ctrl);

组合逻辑电路数据流建模

数据流建模使用的基本语句是连续赋值语句,用于对wire型变量进行赋值,由关键词ass

ign开始,由操作数和运算符组成的逻辑表达式。

2选1数据选择器:wireA,B,SEL,L;

assignL=(A&〜SEL)|(B&SEL);

组合逻辑电路行为级建模

描述数字逻辑电路的功能和算法,使用always结构,后面跟一系列过程赋值语句,给r

eg类型变量赋值。

1.条件语句:if:①if(condition_expr)true_staternent;

②if(condition_expr)true_statement;

eIsefale_statement;

(3)if(condition__exprl)true_statement1;

elseif(condition_expr2)true-statement2;

elsedefau1t_statement;

注:if括号中的表达式若为0,z或x都按“假”解决,否则按“真”处。

理。

2.多支路分支语句:case:case(case_expr)

item_expr1:statement1;

item_expr2:statement2;

default:default_statement;〃可省略

endcase

注:若分支后的语句是多条语句,要在多余语句前加上begin,最后加上

oendo

3.always:a1ways@(循环执行条件)表达括号内的任意一个变量发生变化时,其下面

。的过程赋值语句就执行一次,执行完最后一句时,执行挂起,等待变量发生变

。化,圆括号内的变量被称为敏感变量。

注:①敏感变量互相之间用or连接②只能给寄存器变量赋值(reg型)。

用verilog描述锁存器和触发器

1.时序电路建模:always@(事件控制表达式/敏感事件表)

begin

块内局部变量的定义;

过程赋值语句;//左边的变量必须为寄存器数据类型,右边随意

end

敏感事件分两种类型:电平敏感,边沿触发

①电平敏感:aIways@(SELoraorb)

SEL,a,b中任意一个信号电平发生变化则后面的。

语句执行一次。

②边沿触发:posedge(上升沿)negedge(下降沿)

always@(posedgeCPorposedgeCR)

时钟信号CP上升沿到来或清零信号CR跳变为低

电平时,执行之后的语句。

always内部的赋值语句:阻塞型赋值语句(二号赋值),非阻塞型赋值语句(。号赋值)

①阻塞型赋值语句:按语句由上到下的顺序进行赋值,即有

先后顺序

②非阻塞型赋值语句:并行执行,所有语句同时执行赋值

注:一■个语句块(begin…end)中只允许使用一种类型的赋

。值方式,时序电路中采用非阻塞型赋值语句。

用verilog描述时序逻辑电路

1.移位寄存器的Verilog建模:左移:Q<={Dsl,Q[3:l]}

将左移输入端Dsi的数据直接传给输出Q[3],

Q[3]->Q[2],Q[2]->Q[1],Q[1]->Q[O](Q[3:H

传给Q[2;OJ)

右移:Q<={Q[3:0],Dsr};

moduleTest_shift74194(S1,SO,D,DsI,Dsr,Q,CP,CR);

inputS1,SO;

inputDshDsr;

inputCP,CR;

input[3:0]D;

output[3:0]Q;

regE3:0JQ;

aIways@(posedgeCPornegedgeCR)

if(〜CR)Q<=4^0000;

else

case({SI,SO})

21600:Q<=Q;

b01:Q<={Q[2:0],Dsr};

2fb10:Q<={Dsl,Q[3:l]};

b11:Q<=D;

endcase

endmodu1e

2,计数器的Verilog建模:

a)同步二进制计数器:

modulecounter(CEP,CET,PE,D,CP,CR,Q,TC);

inputCEP,CET,PE,CP,CR;

input[3:0]D;

outputTC;

output[3:0]Q;

reg[3:0JQ;

wireCE;

assignCE=CEP&CET;

assignTC=CET&(Q==4'bl111);

always@(posedgeCPornegedgeCR)

if(~CR)Q<=4'b0000;

elseif(~PE)Q<=D;

elseif(-CE)Q<=Q;

eIseQ<=Q+l'b1;

endmodule

)ps20.040.0ns60』ns80.0ns100.0ns1200ns140.0ns160.0ns

ValuenS

Name

15.0315.025its

J_

CP_Aj__n匚L_TLnLTT^_^Ln_TLT1LT

91CEPA

D^2CETA

心3CRA—i__r~

后4SDA[•I[0]

•9PEA

各10aQA[:]::[2]X(3]X(4]X(5]X(6]X门]X[8]x[£]XioX[o]XCdXC2]X[3]X[4]X[5]

"15TCAI

b)异步二进制计数器:

moduleripplecounter(Q0,Q1,Q2,Q3,CP,CR);

outputQ0,Q1,Q2,Q3;

inputCP,CR;

D_FFFF0(QO,〜QO,CP,〜CR);

D_FFFF1(Q1,~Q1,Q0,〜CR);

D_FFFF2(Q2,~Q2,Q1,~CR);

D_FFFF3(Q3,〜Q3,Q2,〜CR);

endmodule

moduleD_FF(Q,D,CP,Rd);

outputQ;

inputD,CP,Rd;

regQ;

always@(negedgeCPornegedgeRd)

if(〜Rd)Qv=「bO;

elseQ<=D;

endmodule

c)非二进制计数器:

modu1em10_counter(CE,CP,CR,Q);

inputCE,CP,CR;

output[3:0]Q;

reg[3:0]Q;

a1ways@(posedgeCPornegedgeCR)

if(-CR)Q<=4,b0000;

eIseif(CE)

beginif(Q>=4'b1001)Q<=4fb0000:

e1seQ<=Q+l'b1;

end

elseQ<=Q;

endmodu1e

所有实验代码及电路波形:

十进制可逆计数器实验:

代码一(可逆计数器):

modulekenijishuqi(set,cin,cIk,cIr,upd,q,co);

inputclk,c1r,upd,set;

input[3:0]cin;

outputregco;

outputreg[3:0]q;

always@(posedgeclkornegedgeclr)

begin

if(!clr)

if(!set)//clear0

begin

q=cin;

end

else

begin

q=0;co=0;

end

else

begin

if(upd)//addcounter

begin

if(q==4*d8)co=1'b1;//whenq=1000b,co=1

elseco=0;//elseco=0

if(q<4'd9)q=q+1*b1;//whenq<=1000b,

elseq=0;//q=1001nextq=0000

end

else//decrese

begin

if(q==l)co=l1bl;

elseco=0;

if(q>0)q=q-l'bl;

elseq=4'd9;

end

end

end

endmodule

代码二(BCD码.七段译码器):

moduledecode4_7(codeout,indec);

inputL3:01indec;

output[6:0]codeout;

reg[6:0]codeout;

always@(indec)

begin

case(indec)

4*d0:codeout=7'b1111110;

4'd1:codeout=7zb0110000;

4'd2:codeout=7'bl101101;

4'd3:codeout=7,bl111001;

41d4:codeout=7'bO110011;

4'd5:codeout=7rb1011

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论