FPGA——Verilog基础语法

一、Verilog模块结构

在这里插入图片描述

  • 一般端口列表与端口信号说明写到一起,即模块名(端口信号说明);

1.1 模块名

  • 模块名是指电路的名字,由用户指定,需要与文件名一致(特别是在
    Quartus II软件中调试时);

1.2 端口信号

  • 端口信号声明是要说明端口信号的输入输出属性、信号的数据类型,以及信号的位宽;输入输出属性有input,output,inout三种,信号的数据类型常用的有wire和reg两种;信号的位宽用[n1:n2]表示;同一类信号之间用逗号隔开;
  • 例:
module full_adder (
input         		 cin,
input  [3:0]   		 a,
input  [3:0]   		 b,

output				 cout,
output  reg [3:0]    s
);
  • 位宽如果不做说明的话,默认是1位;
    数据类型不做说明的话,默认是wire型的。

二、assign语句

assign语句称作连续赋值语句
基本格式:

assign 赋值目标 = 表达式;
  • 之所以称为连续赋值语句是指其总是处于激活状态,只要表达式中的操作数有变化,立即进行计算和赋值。(与连续赋值语句对应的另一种语句称为过程赋值语句)
  • 赋值目标必须是wire型的,wire表示电路间的连线
  • 一般在组合逻辑中使用

三、运算符

(这里只给出一些不常见的)

  1. 算术运算符
    ** 求幂
  2. 等价运算符
    == 等于
    != 不等于
    === case等于
    !== case不等于
  • 例:
    Y=(1’b1 ==1’bx); 结果为x
    Y=(1’bx ==1’bx); 结果为x
    Y=(1’b1 ===1’bx); 结果为0
    Y=(1’bx ===1’bx); 结果为1
  • case等和case不等的结果只能是1或0,对于x、z认为是确定的值,参
    加比较;
  1. 移位运算符
    >> 右移
    >>> 算数右移
  • 例:
    Y= 4’b1001 >> 1; 结果为0100
    Y= 4’sb1001 >>> 1; 结果为1100
  1. 拼接运复制算符
    {} 拼接
    {{}} 复制拼接
  • 例:
    Y= {4’b1001, 2’b11}; 结果为100111
    Y= {4{2’b01}}; 结果为01010101
    Y= {{4{2’b01}}, 2’b11};

四、always语句块

always语句块又称过程块,过程块中的赋值语句称为过程赋值语句
基本格式:

always @(敏感信号条件表)
	各类顺序语句;
  • 该语句块不是总处于激活状态,当满足激活条件时才能被执行,否则被挂起,挂起时即使操作数有变化,也不执行赋值,赋值目标值保持不变
  • 赋值目标必须是reg型的
  • 一般在时序逻辑中使用

激活条件:敏感信号条件表决定,当敏感条件满足时,过程块被激活
敏感条件:一种是边沿敏感(posedge上升沿/negedge下降沿),适用于时序逻辑;一种是电平敏感,适用于组合逻辑

关于阻塞赋值与非阻塞赋值
设计组合电路时常用阻塞赋值
设计时序电路时常用非阻塞赋值

五、底层模块的调用

底层模块是要在顶层模块中调用的
底层模块调用格式:

底层模块名 例化名 (端口映射);
  • 端口调用有两种方法
  • 顺序法
DFF dff1(
clk,
d1,
q1
);
  • 命名法
DFF dff1(
.CLK	(clk),
.D		(d1),
.Q		(q1)
);
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值