您好,欢迎来到纷纭教育。
搜索
您的当前位置:首页verilog语法入门学习——2011年2月27日18点10分32秒

verilog语法入门学习——2011年2月27日18点10分32秒

来源:纷纭教育
module 和 endmodule 中间放置定义。 有输入与输出,以及直接的逻辑,如下:

module adder ( count,sum,a,b,cin );

input [2:0] a,b; input cin; output count; output [2:0] sum;

assign {count,sum}=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 begin „; „; „; end „ „//产生测试信号 always #delay begin „; end „ „//产生测试信号

Testedmd m(.in1(ina), .in2(inb), .out1(outa), .out2(outb) ); //被测模块的实例引用

initial begin „.; „.; „. end //记录输出和响应 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; end initial begin

$monitor ($time, , “out=%b a=%b sel=%b”, out,a,b,sel);

End

在initial 块中,用系统任务$time 和 $monitor

$dumpfile(“file.dump”); //打开记录数据变化的数据文件 $dumpvars(); //选择需要记录的变量 $dumpflush; //把记录在数据文件中的资料转送到硬盘保存

$dumpoff; //停止记录数据变化 $dumpon; //重新开始记录数据变化 $dumplimit(); //规定数据文件的大小(字节) $dumpall; //记录所有指定信号的变化值到数据文件中 begin

$dumpfile(“vlog.dump”); $dumpvars(0,top); End

常数表示方法: 《位数》‘《基数》《值》

‘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 无符号整数变量,位宽(Verilog-XL仿真

工具用位的正数来记录仿真时刻)

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 begin a = 0; b = 0; #10 a =1; „. end endmodule

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_file.dat”;

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_file.dat”; „ endmodule

module test; „

mod mk(out,ina,inb);

defparam mk.cycle=6, mk.file=“../my_mem.dat”; „ Endmodule 总结:

看了和没看一样

大致看来,verilog好用,写仿真更容易,但是wire和register更混乱。

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- fenyunshixun.cn 版权所有 湘ICP备2023022495号-9

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务