您的位置 首页 元件

Verilog HDL 规划模仿

Verilog HDL 不仅提供描述设计的能力,而且提供对激励、控制、存储响应和设计验证的建模能力。激励和控制可用初始化语句产生。验证运行过程中的响应可以作为 “ 变化时保存 ” 或作为选通的数据存储

Verilog|3″>Verilog HDL 不只供给描绘规划的才干,并且供给对鼓励、操控、存储呼应和规划验证的建模才干。鼓励和操控可用初始化句子发生。验证运转进程中的呼应能够作为 “ 改变时保存 ” 或作为选通的数据存储。最终,规划验证能够经过在初始化句子中写入相应的句子主动与希望的呼应值比较完结。
下面是测验模块 Top 的比如。该比如测验上面讲到的 FA_Seq 模块。

‘timescale 1ns/1ns
module Top; // 一个模块能够有一个空的端口列表。
reg PA, PB, PCi;
wire PCo, PSum;

// 正在测验的实例化模块:
FA_Seq F1(PA, PB, PCi, PSum, PCo); // 定位。

initial
begin: ONLY_ONCE
reg [3:0] Pal;
// 需求 4 位 , Pal 才干取值 8 。

for (Pal = 0; Pal 8; Pal = Pal + 1)
begin
{PA, PB, PCi} = Pal;
#5 $display (“PA, PB, PCi = %b%b%b”, PA, PB, PCi,
“ : : : PCo, PSum=%b%b”, PCo, PSum);
end
end
endmodule

在测验模块描绘中运用方位相关方法将模块实例句子中的信号与模块中的端口相衔接。也就是说, PA 衔接到模块 FA_Seq 的端口 A , PB 衔接到模块 FA_Seq 的端口 B ,依此类推。留意初始化句子中运用了一个 for 循环句子,在 PA 、 PB 和 PCi 上发生波形。 for 循环中的第一条赋值句子用于表明兼并的方针。自右向左,右端各相应的位赋给左端的参数。初始化句子还包括有一个预先界说好的体系使命。体系使命 $display 将输入以特定的格局打印输出。
体系使命 $display 调用中的时延操控规则 $display 使命在 5 个时间单位后履行。这 5 个时间单位基本上代表了逻辑处理时间。便是输入向量的加载至观察到模块在测验条件下输出之间的延迟时间。
这一模型中还有别的一个细微差别。 Pal 在初始化句子内被部分界说。为完结这一功用,初始化句子中的次序进程( begin-end )有必要符号。在这种情况下 , ONLY_ONCE 是次序进程符号。假如在次序进程内没有部分声明的变量,就不需求该符号。下面是测验模块发生的输出。

PA, PB, PCi = 000 ::: PCo, PSum = 00
PA, PB, PCi = 001 ::: PCo, PSum = 01
PA, PB, PCi = 010 ::: PCo, PSum = 01
PA, PB, PCi = 011 ::: PCo, PSum = 10
PA, PB, PCi = 100 ::: PCo, PSum = 01
PA, PB, PCi = 101 ::: PCo, PSum = 10
PA, PB, PCi = 110 ::: PCo, PSum = 10
PA, PB, PCi = 111 ::: PCo, PSum = 11

验证与非门穿插衔接构成的 RS_FF 模块的测验模块如下例所示。

`timescale 10ns/1ns
module RS_FF (Q, Qbar, R, S);
output Q, Qbar;
input R, S;

nand #1 (Q, R, Qbar);
nand #1 (Qbar, S, Q,);
// 在门实例句子中,实例名称是可选的。
endmodule

module Test;
reg TS, TR;
wire TQ, TQb;

// 测验模块的实例句子:
RS_FF NSTA (.Q(TQ), .S(TS), .R(TR), .Qbar(TQb));
// 选用端口名相相关的衔接方法。

// 加载鼓励:
initial
begin:
TR = 0;
TS = 0;
#5 TS = 1;
#5 TS = 0;
TR = 1;
#5 TS = 1;
TR = 0;
#5 TS = 0;
#5 TR = 1;
end
// 输出显现:
initial
$monitor (At time %t , , $time,
TR = %b, TS=%b, TQ=%b, TQb= %b, TR, TS, TQ, TQb);
endmodule

RS_FF 模块描绘了规划的结构。在门实例句子中运用门时延;例如,第一个实例句子中的门时延为 1 个时间单位。该门时延意味着假如 R 或 Qbar 假定在 T 时间改变, Q 将在 T+1 时间取得计算结果值。
   模块 Test 是一个测验模块。测验模块中的 RS_FF 用实例句子阐明其端口用端口名相关方法衔接。在这一模块中有两条初始化句子。第一个初始化句子只简略地发生 TS 和 TR 上的波形。这一初始化句子包括带有句子间时延的程序块进程赋值句子。
   第二条初始化句子调用体系使命 $monitor 。这一体系使命调用的功用是只需参数表中指定的变量值发生改变就打印指定的字符串。下面是测验模块发生的输出。请留意 `timescale 指令在时延上的影响。

At time 0, TR=0, TS=0, TQ=x, TQb= x
At time 10, TR=0, TS=0, TQ=1, TQb= 1
At time 50, TR=0, TS=1, TQ=1, TQb= 1
At time 60, TR=0, TS=1, TQ=1, TQb= 0
At time 100, TR=1, TS=0, TQ=1, TQb= 0
At time 110, TR=1, TS=0, TQ=1, TQb= 1
At time 120, TR=1, TS=0, TQ=0, TQb= 1
At time 150, TR=0, TS=1, TQ=0, TQb= 1
At time 160, TR=0, TS=1, TQ=1, TQb= 1
At time 170, TR=0, TS=1, TQ=1, TQb= 0
At time 200, TR=0, TS=0, TQ=1, TQb= 0
At time 210, TR=0, TS=0, TQ=1, TQb= 1
At time 250, TR=1, TS=0, TQ=1, TQb= 1
At time 260, TR=1, TS=0, TQ=0, TQb= 1

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/xinpin/yuanjian/192648.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部