Verilog HDL语言学习笔记

一、verilog语言概括

Verilog HDL是一种硬件描述语言,可以实现从行为级(包括算法级、系统级等)、RTL级、门级到开关级的多种抽象设计层级的数字系统建模。

二、verilog HDL基础部分

2.1基本框架

module 模块名(端口列表);
//端口声明,也称为1/0声明,关键字有input、output、inout
//参数定义(可选,用于定义模块内部使用的常量)
//内部信号声明,也被称为“数据类型”声明,可以是wire或reg等类型
/*模块内部Verilog HDL编程的主体部分,可以包含函数、任务、UDP的引用,
*也可以是低层次模块的引用;作为编程实现,还可以使用数据流建模(连续赋值*
*assign)和行为建模语句(过程块initial,always) */
//可选:任务或函数(task,function)
//可选:模块中还可以包含延迟说明块
endmodule
 2.1.1模块

模块名称由首字母组合,可以取单词前几个字母

built in self test //可以命名为bist或者BIST
arithmatic logical unit//可以命名为alu或者ALI
transceivers/可以命名为tran或者Tran
Liquid Crystal on Silicon //可以命名为1cos或者Lcos

 模块的内部结构

有点像C语言中的函数

modulemodule_name (port_list); //模块声明(端口声明列表)
input; //输入信号声明
output; //输出信号声明
inout; //输入/输出信号声明
//寄存器类型声明 regt
//线网类型声明 wire:
parameter; //参数声明
//主程序代码,建模结构部分,具体语法将在后续章节中讲述
gate level //门级建模
assign level //连续赋值建模
initial //行为级建模
always @(posedge clk and negedge reset)
udp structure;
sub_module u(out,input1,input2);
//被调用的子模块
function //函数
task //任务
endmodule

逻辑与门

/*第一种方法是逻辑门单元*/
module and_2(in1,in2,out);
input inl,in2; 输入信号
output out; //输出信号
and m1( out,inl,in2 );
//这是逻辑门实例化描述法,and是“逻辑与”的关键字,m1是设计者自定义的实例化名,括号内是
//逻辑门的输出和输入端口
endmodule
/*第二种方法是连续赋值法*/
module and_2( inl,in2,out );
input inl,in2; 输入信号
output out; //输出信号
assign out = inl&in2;
//assign是连续赋值语句的关键字,在后续章节中讲述
endmodule

2.2基本语法

Verilog HDL语言规定区分大小写,其中关键字全部为小写

标识符:

(1)一个简单的标识符应包含字母、数字、美元符号“$”和下划线“_”等。

(2)一个简单的标识符的第一个字符不能是“0,1.2,….9”或美元符号“$”,它可以是字母或下划线。

(3)标识符是区分大小写的。

(4)以美元符号开始的标识符是系统函数保留的标识符

module
input
parameter
always
begin
if
xor
pmos
end
endmodule
 数字声明:

Verilog HDL语言包含整数数字和实数数字

<+/-><位宽>'<进制><数字>

二进制(B、b)例如:4‘b0100

八进制(O、o)

十进制(D、d)

十六进制(H、h)

注意问题:

1. 较长的数字将可用下划线分开,但不可以用在位宽和进制处,只能用在具体的数字之间,而且下划线不能用作首字符。

例如: 16’b1010_1011_1111_1010 //合法格式

            8’b_0011_1010 // 非法格式
2.如果定义的位宽比实际位数长,通常在左边填 0 补位,但如果数最左边一位为 x或 z 值,就相应地用 x 或 z 在左边补位;如果定义的位宽比实际位数小,那么最9左边的位相应地被截断。
3.整数可以带符号,并且+/-号应写在最左边,而不可以放在位宽、进制和具体的
数之间。
例如:
-8’d5 // 这个表达式表示 5 的补数(用八位二进制数表示)
8’d-5 // 非法格式

注释:/**/ //

空格:\b  

制表符:t

换行符号: 回车

2.3参数定义

parameter 定义常量

parameter  参数名 1=表达式,参数名 2=表达式,......,参数名 n=表达式;

2.4变量

wire型
wire 型数据用来表示以 assign 关键字指定的组合逻辑信号。 Verilog 程序模块中输入、输出
信号类型默认时自动定义为 wire 型。 wire 型信号可以用做任何方程式的输入,也可以用做
assign ”语句或实例元件的输出。 wire 型信号的格式如下:
    wire [n-1 0] 数据名 1 ,数据名 2 ,„„,数据名 i
    wire [n 1] 数据名 1 ,数据名 2 ,„„,数据名 i // 共有 i 条总线,每条总线内有 n 条线路
reg型

改变寄存器储存的值,与改变触发器储存的值相当。

reg [n-1 0] 数据名 1 ,数据名 2 ,„„,数据名 i
reg [n 1] 数据名 1 ,数据名 2 ,„„,数据名 i
Verilog HDL 语言中没有多维数组存在。但是可以通过扩展 reg
数据的地址范围来生成 memory 型数据。其格式如下:
reg [n-1 0] 存储器名 [m-1 0]
reg [n-1 0] 存储器名 [m 1];

2.5条件语句和循环语句

2.5.1条件语句

if(条件)

else 

或者

if(条件)

else if(条件)

case 语句是一种多分支选择语句,一般格式如下:
case( 表达式 )
分支表达式 1 语句 1
„„
分支表达式 m 语句 m
默认项( default 项) 语句 n
endcase
2.5.2循环语句
forever :连续的执行语句。
repeat :连续执行一条语句 n 次。
while :执行一条语句直到某个条件不满足,如果一开始就不满足则语句一次也不能被执行。
for :执行语句直到某个条件不满足,实际上相当于 while 语句。
while(表达式)
begin
        语句;
end
for( 循环变量赋初值;循环结束条件;循环变量增值 )
begin
        语句 ;
end

2.6结构说明语句

initial 语句的格式如下:
        initial
                begin
                        语句 1;
                        语句 2;
                        语句 n;
        end
initial 语句通常用来在仿真开始时对各变量进行初始化,或者用 initial 语句来生成激励波
形。
always 语句由于其不断重复执行特性,只有和一定的时序控制结合在一起才有用。其一般
格式如下:
        always<时序控制 >  语句;或
        always<时序控制 >
          begin
                语句 1;
                语句 2;
           end
function 语句的一般格式为:
function < 返回值位宽或类型说明 > 函数名;
        端口声明;
        局部变量定义;
        其他语句;
endfunction
< 返回值位宽或类型说明 > 是一个可选项,如果缺省,则返回一位寄存器类型的数据。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值