Verilog所有知识点Word格式文档下载.docx
- 文档编号:20556287
- 上传时间:2023-01-24
- 格式:DOCX
- 页数:13
- 大小:256.63KB
Verilog所有知识点Word格式文档下载.docx
《Verilog所有知识点Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《Verilog所有知识点Word格式文档下载.docx(13页珍藏版)》请在冰豆网上搜索。
initial//initial是过程语句结构,赋值给寄存器类型变量
counter=-1;
③real:
通常用于对实数型常量进行储存运算
realdelta;
initial
begin
delta=4e10;
delta=2.13
end
integeri;
initiali=delta;
//i得到的值为2
④time:
主要用于储存仿真时间,只储存无符号整数,常调用系统函数$time
timecurrent_time;
initial
current_time=$time;
Verilog基本结构
module模块名(端口名1,端口名2,…)
端口类型说明(input,output,inout)//inout是双向端口
参数定义;
//将常量用符号常量代替,非必须结构
数据类型定义(wire,reg等)
实例化底层模块和基本门级元件;
连续赋值语句(assign);
过程块结构(initial和always);
行为描述语句;
endmodule
描述方式:
①结构描述方式:
调用其他已定义好的底层模块对整个电路进行描述,或直接调用基本门级元件描述。
②数据流描述方式:
使用连续赋值语句对电路逻辑功能进行描述。
③行为描述方式:
使用过程块语句结构(initial,always)。
组合逻辑电路门级建模
基本门级元件:
and:
多输入与门or:
多输入或门xor:
多输入异或门
buf:
多输出缓冲器bufif1:
高电平有效三态缓冲器
bufif0:
低电平有效三态缓冲器
nand:
多输入与门nor:
多输入或非门xnor:
多输入异或非门
not:
多输入反相器notif1:
高电平有效三态反相器
notif0:
低电平有效三态反相器
①多输入门:
andA1(out,in1,in2,in3);
②多输出门:
bufB1(out1,out2,…,in);
③三态门:
bufif1B1(out,in,ctrl);
notif1N1(out,in,ctrl);
组合逻辑电路数据流建模
数据流建模使用的基本语句是连续赋值语句,用于对wire型变量进行赋值,由关键词assign开始,由操作数和运算符组成的逻辑表达式。
2选1数据选择器:
wireA,B,SEL,L;
assignL=(A&
~SEL)|(B&
SEL);
组合逻辑电路行为级建模
描述数字逻辑电路的功能和算法,使用always结构,后面跟一系列过程赋值语句,给reg类型变量赋值。
1.条件语句:
if:
①if(condition_expr)true_statement;
②if(condition_expr)true_statement;
elsefale_statement;
③if(condition_expr1)true_statement1;
elseif(condition_expr2)true-statement2;
.
elsedefault_statement;
注:
if括号中的表达式若为0,z或x都按“假”处理,否则按“真”处理。
2.多支路分支语句:
case:
case(case_expr)
item_expr1:
statement1;
item_expr2:
statement2;
.
default:
default_statement;
//可省略
endcase
若分支后的语句是多条语句,要在多余语句前加上begin,最后加上end。
3.always:
always@(循环执行条件)表示括号内的任意一个变量发生变化时,其下面的过程赋值语句就执行一次,执行完最后一句时,执行挂起,等待变量发生变化,圆括号内的变量被称为敏感变量。
①敏感变量互相之间用or连接②只能给寄存器变量赋值(reg型)。
用verilog描述锁存器和触发器
1.时序电路建模:
always@(事件控制表达式/敏感事件表)
begin
块内局部变量的定义;
过程赋值语句;
//左边的变量必须为寄存器数据类型,右边随意
end
敏感事件分两种类型:
电平敏感,边沿触发
①电平敏感:
always@(SELoraorb)
SEL,a,b中任意一个信号电平发生变化则后面的语句执行一次。
②边沿触发:
posedge(上升沿)negedge(下降沿)
always@(posedgeCPorposedgeCR)
时钟信号CP上升沿到来或清零信号CR跳变为低电平时,执行之后的语句。
always内部的赋值语句:
阻塞型赋值语句(=号赋值),非阻塞型赋值语句(<
=号赋值)
①阻塞型赋值语句:
按语句由上到下的顺序进行赋值,即有先后顺序
②非阻塞型赋值语句:
并行执行,所有语句同时执行赋值
一个语句块(begin…end)中只允许使用一种类型的赋值方式,时序电路中采用非阻塞型赋值语句。
用verilog描述时序逻辑电路
1.移位寄存器的Verilog建模:
左移:
Q<
={Dsl,Q[3:
1]}
将左移输入端Dsl的数据直接传给输出Q[3],
Q[3]->
Q[2],Q[2]->
Q[1],Q[1]->
Q[0](Q[3:
1]传给Q[2:
0])
右移:
={Q[3:
0],Dsr};
moduleTest_shift74194(S1,S0,D,Dsl,Dsr,Q,CP,CR);
inputS1,S0;
inputDsl,Dsr;
inputCP,CR;
input[3:
0]D;
output[3:
0]Q;
reg[3:
always@(posedgeCPornegedgeCR)
if(~CR)Q<
=4'
b0000;
else
case({S1,S0})
2'
b00:
=Q;
b01:
={Q[2:
b10:
1]};
b11:
=D;
endcase
2.计数器的Verilog建模:
a)同步二进制计数器:
modulecounter(CEP,CET,PE,D,CP,CR,Q,TC);
inputCEP,CET,PE,CP,CR;
outputTC;
wireCE;
assignCE=CEP&
CET;
assignTC=CET&
(Q==4'
b1111);
elseif(~PE)Q<
elseif(~CE)Q<
elseQ<
=Q+1'
b1;
b)异步二进制计数器:
moduleripplecounter(Q0,Q1,Q2,Q3,CP,CR);
outputQ0,Q1,Q2,Q3;
D_FFFF0(Q0,~Q0,CP,~CR);
D_FFFF1(Q1,~Q1,Q0,~CR);
D_FFFF2(Q2,~Q2,Q1,~CR);
D_FFFF3(Q3,~Q3,Q2,~CR);
moduleD_FF(Q,D,CP,Rd);
outputQ;
inputD,CP,Rd;
regQ;
always@(negedgeCPornegedgeRd)
if(~Rd)Q<
=1'
b0;
c)非二进制计数器:
modulem10_counter(CE,CP,CR,Q);
inputCE,CP,CR;
elseif(CE)
beginif(Q>
b1001)Q<
所有实验代码及电路波形:
十进制可逆计数器实验:
代码一(可逆计数器):
modulekenijishuqi(set,cin,clk,clr,upd,q,co);
inputclk,clr,upd,set;
input[3:
0]cin;
outputregco;
outputreg[3:
0]q;
always@(posedgeclkornegedgeclr)
if(!
clr)
set)//clear0
q=cin;
else
q=0;
co=0;
if(upd)//addcounter
if(q==4'
d8)co=1'
//whenq=1000b,co=1
elseco=0;
//elseco=0
if(q<
4'
d9)q=q+1'
//whenq<
=1000b,
elseq=0;
//q=1001nextq=0000
else//decrese
if(q==1)co=1'
if(q>
0)q=q-1'
elseq=4'
d9;
代码二(BCD码-七段译码器):
moduledecode4_7(codeout,indec);
0]indec;
output[6:
0]codeout;
reg[6:
always@(indec)
begin
case(indec)
d0:
codeout=7'
b1111110;
d1:
b0110000;
d2:
b1101101;
d3:
b1111001;
d4:
b0110011;
d5:
b1011011;
d6:
b1011111;
d7:
b1110000;
d8:
b1111111;
d9:
b1111011;
bx;
移位器使用74198,不用代码:
Pw脉冲控制m:
代码一:
moduleswm_1(clk,out10khz);
inputclk;
reg[12:
0]q5000;
outputregout10khz;
always@(posedgeclk)
if(q5000<
=2499)
begin
q5000<
=q5000+1;
out10khz<
=1;
elseif(q5000<
=4999)
=0;
end
代码二:
moduleswm_2(clk2,a,b,cout);
inputclk2;
0]a,b;
outputregcout;
wire[6:
0]zhishu;
reg[7:
0]q100;
assignzhishu=10*a+b;
always@(posedgeclk2)
if(q100<
=zhishu)
cout<
q100<
=q100+1;
elseif(q100<
99)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Verilog 所有 知识点