内容发布更新时间 : 2024/12/27 15:04:42星期一 下面是文章的全部内容请认真阅读。
^~,~^ 按位同或(符号^~与~^是等价的) p53
4.关系运算符(Relational operators) < 小于 <= 小于或等于 > 大于 >= 大于或等于 p54
5.等式运算符(Equality Operators) == 等于 != 不等于 === 全等
!== 不全等
6.缩位运算符(Reduction operators) & 与 ~& 与非 | 或 ~| 或非 ^ 异或 ^~,~^ 同或
7.移位运算符(shift operators) >> 右移 << 左移 p57
8.条件运算符(conditional operators) ?:
三目运算符,其定义方式如下:
signal=condition?true_expression:false_expression; 即:信号=条件?表达式1:表达式2;
当条件成立时,信号取表达式1的值,反之取表达式2的值。 p58
9.位拼接运算符(concatenation operators) { }
该运算符将两个或多个信号的某些位拼接起来。使用如下: {信号1的某几位,信号2的某几位,??,信号n的某几位} p59
习 题
6.1 下列标识符哪些是合法的,哪些是错误的?
Cout, 8sum, \\a*b, _data, \\wait, initial, $latch
6.2 下列数字的表示是否正确?
6'd18, 'Bx0, 5'b0x110, 'da30, 10'd2, 'hzF 6.3 定义如下的变量和常量: (1)定义一个名为count的整数;
(2)定义一个名为ABUS的8位wire总线;
(3)定义一个名为address的16位reg型变量,并将该变量的值赋为十进制数128; (4)定义参数Delay_time, 参数值为8; (5)定义一个名为DELAY的时间变量; (6)定义一个32位的寄存器MYREG;
(7)定义一个容量为128,字长为32位的存储器MYMEM; 第7章 Verilog行为语句 p61
Verilog HDL行为语句
类别 块语句
赋值语句
循环语句
编译向导语句 p62
7.1 过程语句 initial always
在一个模块(module)中,使用initial和always语句的次数是不受限制的。initial语句常用于仿真中的初始化,initial过程块中的语句仅执行一次;always块内的语句则是不断重复执行的。 p63
initial always
语句
串行块begin-end 并行块fork-join 持续赋值assign 过程赋值=、<= if-else case for repeat while forever `define `include
`ifdef, `else, `endif
可综合性
√ √
√ √ √ √ √
√ √ √
always过程语句使用模板
always @(<敏感信号表达式event-expression>) begin
//过程赋值
//if-else,case,casex,casez选择语句 //while,repeat,for循环 //task,function调用 end
“always”过程语句通常是带有触发条件的,触发条件写在敏感信号表达式中,只有当触发条件满足时,其后的“begin-end”块语句才能被执行。 p64
7.2 块语句
块语句是由块标志符begin-end或fork-join界定的一组语句,当块语句只包含一条语句时,块标志符可以缺省。
begin-end串行块中的语句按串行方式顺序执行。比如: begin
regb=rega; regc=regb; end
由于begin-end块内的语句顺序执行,在最后,将regb、regc 的值都更新为rega的值,该begin-end块执行完后,regb、regc 的值是相同的。 p65
7.3 赋值语句
持续赋值语句(Continuous Assignments)
assign为持续赋值语句,主要用于对wire型变量的赋值。 比如:assign c=a&b;
在上面的赋值中,a、b、c三个变量皆为wire型变量,a和b信号的任何变化,都将随时反映到c上来。 p66
7.4 条件语句 ( if-else语句)
if-else语句使用方法有以下3种: (1)if(表达式) 语句1; (2)if(表达式) 语句1; else 语句2;
(3)if(表达式1) 语句1; else if(表达式2) 语句2; else if(表达式3) 语句3; ??
else if(表达式n) 语句n; else 语句n+1; p67
case语句的使用格式如下。
case (敏感表达式)
值1: 语句1; //case分支项 值2: 语句2; ??
值n: 语句n;
default:语句n+1; endcase case语句 p68
7.5 循环语句 repeat loop initial begin
for(i=0;i<4;i=i+1) out = out +1; end initial begin
repeat(5)
out = out +1; end initial begin i=0;
while(i<0) i=i+1; end for loop while loop
在Verilog中存在四种类型的循环语句,用来控制语句的执行次数。这四种语句分别为: (1)forever:连续地执行语句;多用在“initial”块中,以生成时钟等周期性波形。 (2)repeat:连续执行一条语句n次。
(3)while:执行一条语句直到某个条件不满足。 (4)for:有条件的循环语句。 p69
for语句
for语句的使用格式如下(同C语言):
for(表达式1;表达式2;表达式3)语句;
即:for(循环变量赋初值;循环结束条件;循环变量增值)执行语句; p70
7.6 编译指示语句
Verilog允许在程序中使用特殊的编译向导(Compiler Directives)语句,在编译时,通常先对这些向导语句进行“预处理”,然后再将预处理的结果和源程序一起进行编译。
向导语句以符号“`”开头,以区别于其它语句。Verilog提供了十几条编译向导语句,如:`define、`ifdef、`else、`endif、`restall等。比较常用的有`define,`include和`ifdef、`else、`endif等。 p71
宏替换`define
`define语句用于将一个简单的名字或标志符(或称为宏名)来代替一个复杂的名字或字符串,其使用格式为:
`define 宏名(标志符) 字符串 如:`define sum ina+inb+inc+ind
在上面的语句中,用简单的宏名sum来代替了一个复杂的表达式ina+inb+inc+ind,采用了这样的定义形式后,在后面的程序中,就可以直接用sum来代表表达式ina+inb+inc+ind了。 p72
文件包含`include
`include是文件包含语句,它可将一个文件全部包含到另一个文件中。其格式为: `include “文件名”
使用`include语句时应注意以下几点:
(1)一个`include语句只能指定一个被包含的文件。
(2)`include语句可以出现在源程序的任何地方。被包含的文件若与包含文件不在同一个子目录下,必须指明其路径名。
(3)文件包含允许多重包含,比如文件1包含文件2,文件2又包含文件3等。 p73
7.7 任务与函数 任务(task) 任务定义格式:
task <任务名>; //注意无端口列表 端口及数据类型声明语句; 其它语句; endtask 任务调用的格式为:
<任务名>(端口1,端口2,??);
需要注意的是:任务调用时和定义时的端口变量应是一一对应的。 p74
函数的目的是返回一个值,以用于表达式计算 函数的定义格式:
function <返回值位宽或类型说明> 函数名; 端口声明; 局部变量定义; 其它语句; endfunction
<返回值位宽或类型说明>是一个可选项,如果缺省,则返回值为1位寄存器类型的数据。 函数(function) p75
任务与函数的比较