verilog always语法_Verilog入门学习笔记——基础2

  今天又是没有课的一天。。


  一、Verilog内部的基本门级元件

元件符号功能说明元件符号功能说明

and

or

xor

多输入端的与门

多输入端的或门

多输入端的异或门

nand

nor

xnor

多输入端的与非门

多输入端的或非门

多输入端的异或非门

buf多输出端的缓冲器not多输出端的反相器

bufif1

bufif0

控制信号高电平有效的三态缓冲器

控制信号低电平有效的三态缓冲器

notif1

notif0

控制信号高电平有效的三态反相器

控制信号低电平有效的三态反相器

  • 多输入的逻辑门:多个输入,一个输出。多输出门......

  • 多输入门的输出不为高阻态z

  • 多输入与门调用例举:

    e2ae40c8f39cf1ced403a606fde3396c.png

and A1(out, in1, in2, ..., inN);
  • 多输出门调用形式:

    1212a9a71ebd3135a14b0f8ca1d3a8dd.png

buf B1(out1, out2, ..., outN, in);not N2(out1, out2, ..., outN, in);
  • 三态门:一个门输出、一个数据输入、一个输入控制

    输入控制信号无效时,输出为高阻态z

  • 三态门调用形式:

de8365fa9903e55010a38de698ccd71c.png

bufif1 B1(out, in, ctrl);bufif0 B0(out, in, ctrl);notif1 N1(out, in, ctrl);notif0 N0(out, in, ctrl);

二、Verilog基本结构

1、模块module

  • 定义模块基本语法结构

module模块名(端口名1, 端口名2,端口名3,...);端口模式说明(input, output, inout);    //说明部分    inout双向端口参数定义(可选);数据类型定义(wire, reg等);实例化低层次模块或基本门级元件;          //逻辑功能描述部分,排序任意连续赋值语句(assign);过程块结构(initial和always)       行为描述语句;endmodule

1、门级描述

8d17fcbc6b1698a0ad49e2e777a5c438.png

/*module mux2to1(D0, D1, S, Y);  //2选1数据选择器  input D0, D1, S;               //输入端口声明  output Y;                      //输出...  */module mux2to1(input D0, D1, S, output Y);  wire Snot, A, B;             //内部节点...  //↓描述逻辑功能  not U1(Snot, S);  and U2(A, D0, Snot);  and U3(B, S, D1);  or U4(Y, A, B);endmodule

2、数据流描述

8d17fcbc6b1698a0ad49e2e777a5c438.png

module mux2to1_dataflow(D0, D1, S, Y);  input D0, D1, S;  output Y;  wire Y;  //电路功能描述  assign Y = (~S & D0)|(S & D1);    //★表达式左边变量的数据类型必须为wireendmodule

3、行为描述(工作效率更高)

8d17fcbc6b1698a0ad49e2e777a5c438.png

f375df0c81a704458df14e5202b188c9.png

S=0时,Y=D0;S=1时,Y=D1

/*module mux2to1_bh(D0, D1, S, Y);  input D0, D1, S;  output Y;  reg Y;                      //变量的数据类型声明    always@(S or D0 or D1)    //S、D0、D1中有任何一个输入端信号变动都会执行      if(S==1)                //if(S)   Y=D1;        Y=D1;      else         Y=D0;                 //★表达式的左边必须为reg型数据类型endmodule*/可简化为↓module mux2to1_bh(  input D0, D1, S,  output reg Y);  always@(D0, D1, S)  begin    if(S)  Y=D1;    else  Y=D0;  endendmodule
  • always@(S or D0 or D1)无分号,表示括号中任一个变量发生变化时,下面的赋值语句会被执行一次,执行完最后一条语句后,执行挂起,always再次等待变量发生变化。

    括号内的为敏感变量。

  • 组合逻辑电路中所有输入信号皆为敏感变量。都应写在括号内。

  • 过程赋值语句只能赋值寄存器型变量,输出Y的数据类型定义为reg。

  • always@(*) 对比 assign

被assign赋值的信号为wire型

被always@(*)结构块下的信号定义为reg型

这里的reg并不是一个真正的触发器,只有敏感列表为上升沿出发的写法才会综合为触发器,在仿真时才具有触发器的特性。

连续赋值语句assign可以并行执行,相当于描述的是连线

always@(*)描述组合逻辑时,

begin和end之间是串行,一条一条语句执行


三、仿真

搭建测试平台Test Bench

矢量波形文件(.vwf)

明天再做了,今晚弄不出来了。。


c62cbe01b1b04a16dec4d45d4f1b25dd.png

  晚上吃的杂酱米线,太油了,下次换一家!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值