module 和 endmodule 中间放置定义。
有输入与输出,以及直接的逻辑,如下:
module adder ( count,sum,a,b,cin );
input [2:0] a,b;
input cin;
output count;
output [2:0] sum;
assign =a+b+cin;
endmodule
module compare ( equal,a,b );
output equal声明输出信号equal
input [1:0] a,b声明输入信号a,b
assign equal=(a==b)?1:0;
/*如果两个输入信号相等,输出为1。否则为0*/
endmodule
module trist2(out,in,enable);
output out;
input in, enable;
bufif1 mybuf(out,in,enable);
endmodule
module trist1(out,in,enable);
output out;
input in, enable;
mytri tri_inst(out,in,enable);
endmodule
module mytri(out,in,enable);
output out;
input in, enable;
assign out = enable? in : bz;
endmodule
测试模块常见的形式:
module t;
reg被测模块输入/输出变量类型定义。
wire被测模块输入/输出变量类型定义。
initial beginend … 产生测试信号。
always #delay begin …;end … 产生测试信号。
testedmd m(.in1(ina), in2(inb), out1(outa), out2(outb) )
/被测模块的实例引用。
initial beginend //记录输出和响应。
endmodule
module t;
reg a, b, sel;
wire out;
/引用多路器实例。
mux2_m (out, a, b, sel);
/加入激励信号。
initial begin a=0; b=1; sel=0;
10 b=0;
10 b=1; sel=1;
10 a=1;
10 $stop;
endinitial
begin$monitor ($time, ,out=%b a=%b sel=%b”, out,a,b,sel);
end在initial 块中,用系统任务$time 和 $monitor
dumpfile(“ 打开记录数据变化的数据文件。
dumpvars选择需要记录的变量。
dumpflush把记录在数据文件中的资料转送到硬盘保存。
dumpoff停止记录数据变化。
dumpon重新开始记录数据变化。
dumplimit();规定数据文件的大小(字节)
dumpall记录所有指定信号的变化值到数据文件中。
begin$dumpfile(“
$dumpvars(0,top);
end常数表示方法:
位数》‘《基数》《值》
64‘hff01 8’b1101_0001 ‘h83a
verilog语言是大小写敏感的。
hiz、高阻抗、三态、无驱动源
verilog 有三种主要的数据类型: nets register parameter
net种类。
类型功能 wire, tri对应于标准的互连线(缺省)
supply1, supply2 对应于电源线或接地线。
wor, trior 对应于有多个驱动源的线或逻辑连接。
wand, triand 对应于有多个驱动源的线与逻辑连接。
trireg对应于有电容存在能暂时存储电平的连接。
tri1, tri0对应于需要上拉或下拉的连接。
register种类。
类型功能。reg无符号整数变量,可以选择不同的位宽。
integer有符号整数变量,32位宽,算术运算可产生2的。
补码。real有符号的浮点数,双精度。
time无符号整数变量,64位宽(verilog-xl**。
工具用64位的正数来记录**时刻)
module dut(y, a, b_);
output y;
input a,b:
wire y, a, b;
and (y, a, b);
endmodule
如果信号变量是在过程块 (initial块或 always块)中被赋值的,必须把它声明为寄存器类型变量。
module top;
wire y;
reg a, b;
dut u1(y,a,b);
initial
begina = 0; b = 0;
#10 a =1; …
endendmodule
module md1(out,in1,in2);
parameter cycle=20, prop_del=3, setup=cycle/2-prop_del,p1=8, x_word=16’bx,file = user1/jmdong/design/mem_
wire [p1:0] w1; /用参数来说明wire 的位宽。
initial begin $open(file); #20000 display(“%s”,file); stop end
endmodule
参数值的改写。
module mod ( out, ina, inb);
parameter cycle = 8, real_constant=2.039,file = user1/jmdong/design/mem_
endmodule
module test;
mod mk(out,ina,inb);
defparam
endmodule
总结:看了和没看一样。
大致看来,verilog好用,写**更容易,但是wire和register更混乱。
verilog语法
第三章 verilog hdl的基本语法。前言。verilog hdl是一种用于数字逻辑电路设计的语言。用verilog hdl描述的电路设计就是该电路的verilog hdl模型。verilog hdl既是一种行为描述的语言也是一种结构描述的语言。这也就是说,既可以用电路的功能描述也可以用元器件和...
verilog语法总结
整理 张步阳。1.如果没有明确说明,则端口都是wire线网型的,且输入端口只能是wire线网型的。型数据通常以assign关键字指定的组合逻辑信号。wire只能被assign连续赋值,reg 只能在initial和always中赋值。input端口只能定义成wire型。是寄存器数据类型的关键字。寄存...
Verilog语法运用
verilog中条件编译命令 ifdef else endif用法。一般情况下,verilog?hdl源程序中所有的行都参加编译。但是有时候希望对其中的一部份内容只有在条件满足的时候才进行编译,也就是对一部分内容指定编译的条件,这就是 条件编译 有时,希望当满足条件时对一组语句进行编译,当条件不满足...