新闻中心

EEPW首页 > 嵌入式系统 > 学习方法与实践 > 模组(module)的概念

模组(module)的概念

——
作者:时间:2007-08-22来源:收藏

  Verilog中的基本单元是)。

  代表一些可以用硬体实践的逻辑实体。 例如,一个可以是一个逻辑闸、一个三十二位元计数器、一个记忆体子系统、一个机算机系统或是一个用网路相连的多部电脑。
模组中与外界连接端(port)可以是一个位元或数个位元。连接端可以宣告为输入端、输出端或输出入端。

  以下介绍Verilog语法,用三种不同层级(Level)来表示模组的方式。

  下面以一个自定的 AND2 模组来说明。

  它有三个单一位元称为 in1、in2、及 out 的连接端。其中 in1及 in2 为输入,而 out 为输出。其实这个 AND2 模组能做的事和 and 闸是一样的。

  宜礕从结构式层次定义模组的例子

  //structural

   AND2 (in1,in2,out);

  input in1;

  input in2;

  output out;

  wire in1,in2,out;

  and u1 (out,in1,in2);

  end  

二∶从资料流层次程式定义模组的例子

  //data flow

  module AND2 (in1,in2,out);

  input in1;

  input in2;

  output out;

  wire in1,in2,out;

  assign out=in1&in2;

  endmodule

三∶从行为式层次定义模组的例子

  //behavioral

  module AND2 (in1,in2,out); input in1; input in2; output out; wire in1,in2; reg out; always @(in1 or in2); out=in1 & in2;

  endmodule

  一个Verilog模组包含了关键字(keywords)、名字(names)、文字(literals)、 注解(comments)以及标点符号。Verilog语法中大小写与C语言一样,大小写是不一样的,而Verilog中所有的关键字均是使用小写。空白、跳格(tab)及换行是用来增加程式的可读性。注解的用法为 /*注解*/。

  所有的模组均以关键字module开始,并紧跟著该模组的模组名称、输入输出的串列。
所有的模组均以关键字endmodule结束。

  模组名称必须唯宜礎没有重复。

  上述三个例子 的模组接著宣告输出及输入的型别为wire。例外的是在行为式模组的例子将其输出宣告为 reg的型别。其实在Verilog中所有的输出及输入均预设为wire的型别,因此这些宣告(除了宣告为reg型别的输出外)均可省略。

  以上三个模组分别说明三种不同的描述方式∶ 结构式(structural)、资料流程式(data-flow)及行为式(behavioral)。

结构式的描述∶又称逻辑闸层次 -- Gate Level

  在这层次中模组是由逻辑闸连接而成,在这层次的设计工作就好像以前用描绘逻辑闸来设计线路一样。

资料流程式的描述∶ 又称暂存器传送层次 -- Register Transation Level

  它是一种模拟组合函式(combinational-functions)的方法。使用这种描述方式,函式可视为一棵有方向性的树(directed-tree)。输入为其树叶,输出为其树根。 当任何输入有所改变时,输出会被重新计算而跟著改变。资料流程式只能用来实践组合函式。 在这个层次中,要说明资料如何在暂存器中储存与传送,如何处理资料。

行为式的描述∶

  它是一种使用高阶语言来描述硬体的方式。因Verilog提供很普遍及功能强大的描述方式。因此使用行为式所描述的模组其描述与真实的电路可能毫无关连。甚至某些行为式模组可能无费晕硬体实践。这种特性是Verilog的优点也是缺点。 在这个层次的设计工作就好像写C语言一样。

  (例宜礮中的结构式模组有一个AND闸的实例。在(例宜礮中的AND与其他如or、nand、nor、not等均为Verilog的基本元件(primitive)。这些是Verilog语言预先定义好的函式。例如,这个AND闸实例会不断地观测其输入。如果输入有任何变化,这个AND函式将会重新用新的输入值计算出输入值。

  (例二)中的资料流程式模组有一个使用关键字assign的连续设定叙述。

  (例三)中的行为式模组有一个使用关键字always的行为式实例。

  @(in1or in2) 表示式告诉拟器等待 in1或 in2发生变化。 如果发生变化则下列设定 :

  output=in1&in2;

  将表示式 in1AND in2 的值放置於变数out中。同时,always这个关键字也意味著当这个设定完成时,模拟器将等待下一次 in1或 in2 的变化。也就是说,always区块(block)很像传统程 式语言的无穷回圈。

 

 

 



评论


相关推荐

技术专区

关闭