草庐IT

Verilog基本语法之模块以及模块调用详解(2)

Jassica bea 2023-09-01 原文

模块结构

一、模块结构组成

	模块由三个元素组成,分别是模块起始、接口说明、逻辑功能描述

	 1. 模块起始:每个模块都要进行端口定义,格式为:module 模块名(端口1, 端口2, 端口3),
	 2. I/O接口说明:input输出,output输出,inoutput双向接口
	 3.  逻辑功能描述:always、assign等功能描述。

二、模块详解

	组合成为完整程序如下:
		module <模块名> (<端口列表>)
			<I/O接口说明>
			<内部信号声明>
			<逻辑功能定义>
		Endmodule
	拿与门、或门举例:
		module AndOR(a, b, c)//模块起
		    input a,b;//接口方向为输入
		    output c,d;
		 
		    assign c = a & b;//组合逻辑-与
		    assign d = a | b;//组合逻辑-非
		 endmodule   //模块终

注意:每条逻辑功能语句和数据定义的最后必须有分号。

程序模块---->>>到电路模块

注意
Verilog模块中的过程块(initial/always)、模块调用、assign赋值间是并行的
连续赋值语句不能独立于always块存在;
能独立存在的只有assign赋值,以及模块调用;

**

二、模块调用

**
模块调用包括元件库的调用以及已设计模块的调用,设计模块调用如下

1.模块例化有两种方法:按位置顺序调用、按名词调用

  • 1.位置相关:

     	1)例化时,例化的参数顺序必须和模块顺序一致
     	2)例化时,只要写端口名字
    
  • 2.名称相关:

    	1)必须指定当前例化的端口名称
    	2)端口的顺序可以自由排序
    

位置相关举例:

wire [3:0] x1;
wire [3:0] x2;
wire [4:0] x3;

add      add_inst0
(
    x1,    //对应 模块本身的a,顺序必须一一对应
    x2,    //对应 模块本身的b
    x3     //对应 模块本身的c
);

名称相关举例:

wire [3:0] x1;
wire [3:0] x2;
wire [4:0] x3;

add      add_inst1
(
    .a  (x1), 
    .c  (x3),//用“.”指定例化端口名,例化顺序可打乱
    .b  (x2) 
);

三、调用实例

拿一个二选一多路选择器举例,二选一多路选择器代码如下:

module mux21 (dataa,datab, outdata, sel);
      input [2:0] dataa;
      input [2:0] datab;
      inpur sel;
      outdata [2:0] outdata;
      ········
      ········
endmodule

那么我们应该怎么样去调用它呢?如下:

<模块名><实例名>(

	.端口(连线),
	
	.端口(连线)

);

下面是用结构建模的方式调用上述二选一模块,实现三选一:

module mux31 (dataa, datab, datac, sel1, sel2, outdata);

  input[2:0] dataa;
  input[2:0] datab;
  input [2:0] datac;
  input sel1;
  input sel2;
  output [2:0] outdata;

  wire [2:0] data;

  mux21  mux21_dut1(
                    .dataa(dataa).datab(datab).outdata(data).sel(sel1)
                  );

  mux21  mux21_dut2(
                    .dataa(data).datab(datac).outdata(outdata).sel(sel2)
                  );
         
endmodule

上述建模是利用了两个二选一多路选择器来构成了一个三选一多路选择器。

------->下一章: Verilog语法之模块巩固(3)(实例练习篇)

章节进程条-STEP1

有关Verilog基本语法之模块以及模块调用详解(2)的更多相关文章

  1. ruby - 在 Ruby 中使用匿名模块 - 2

    假设我做了一个模块如下:m=Module.newdoclassCendend三个问题:除了对m的引用之外,还有什么方法可以访问C和m中的其他内容?我可以在创建匿名模块后为其命名吗(就像我输入“module...”一样)?如何在使用完匿名模块后将其删除,使其定义的常量不再存在? 最佳答案 三个答案:是的,使用ObjectSpace.此代码使c引用你的类(class)C不引用m:c=nilObjectSpace.each_object{|obj|c=objif(Class===objandobj.name=~/::C$/)}当然这取决于

  2. ruby-on-rails - Ruby net/ldap 模块中的内存泄漏 - 2

    作为我的Rails应用程序的一部分,我编写了一个小导入程序,它从我们的LDAP系统中吸取数据并将其塞入一个用户表中。不幸的是,与LDAP相关的代码在遍历我们的32K用户时泄漏了大量内存,我一直无法弄清楚如何解决这个问题。这个问题似乎在某种程度上与LDAP库有关,因为当我删除对LDAP内容的调用时,内存使用情况会很好地稳定下来。此外,不断增加的对象是Net::BER::BerIdentifiedString和Net::BER::BerIdentifiedArray,它们都是LDAP库的一部分。当我运行导入时,内存使用量最终达到超过1GB的峰值。如果问题存在,我需要找到一些方法来更正我的代

  3. ruby - 树顶语法无限循环 - 2

    我脑子里浮现出一些关于一种新编程语言的想法,所以我想我会尝试实现它。一位friend建议我尝试使用Treetop(Rubygem)来创建一个解析器。Treetop的文档很少,我以前从未做过这种事情。我的解析器表现得好像有一个无限循环,但没有堆栈跟踪;事实证明很难追踪到。有人可以指出入门级解析/AST指南的方向吗?我真的需要一些列出规则、常见用法等的东西来使用像Treetop这样的工具。我的语法分析器在GitHub上,以防有人希望帮助我改进它。class{initialize=lambda(name){receiver.name=name}greet=lambda{IO.puts("He

  4. ruby - 什么是填充的 Base64 编码字符串以及如何在 ruby​​ 中生成它们? - 2

    我正在使用的第三方API的文档状态:"[O]urAPIonlyacceptspaddedBase64encodedstrings."什么是“填充的Base64编码字符串”以及如何在Ruby中生成它们。下面的代码是我第一次尝试创建转换为Base64的JSON格式数据。xa=Base64.encode64(a.to_json) 最佳答案 他们说的padding其实就是Base64本身的一部分。它是末尾的“=”和“==”。Base64将3个字节的数据包编码为4个编码字符。所以如果你的输入数据有长度n和n%3=1=>"=="末尾用于填充n%

  5. ruby-on-rails - 在混合/模块中覆盖模型的属性访问器 - 2

    我有一个包含模块的模型。我想在模块中覆盖模型的访问器方法。例如:classBlah这显然行不通。有什么想法可以实现吗? 最佳答案 您的代码看起来是正确的。我们正在毫无困难地使用这个确切的模式。如果我没记错的话,Rails使用#method_missing作为属性setter,因此您的模块将优先,阻止ActiveRecord的setter。如果您正在使用ActiveSupport::Concern(参见thisblogpost),那么您的实例方法需要进入一个特殊的模块:classBlah

  6. ruby-on-rails - 使用 Sublime Text 3 突出显示 HTML 背景语法中的 ERB? - 2

    所以我在关注Railscast,我注意到在html.erb文件中,ruby代码有一个微弱的背景高亮效果,以区别于其他代码HTML文档。我知道Ryan使用TextMate。我正在使用SublimeText3。我怎样才能达到同样的效果?谢谢! 最佳答案 为SublimeText安装ERB包。假设您安装了SublimeText包管理器*,只需点击cmd+shift+P即可获得命令菜单,然后键入installpackage并选择PackageControl:InstallPackage获取包管理器菜单。在该菜单中,键入ERB并在看到包时选择

  7. 使用 ACL 调用 upload_file 时出现 Ruby S3 "Access Denied"错误 - 2

    我正在尝试编写一个将文件上传到AWS并公开该文件的Ruby脚本。我做了以下事情:s3=Aws::S3::Resource.new(credentials:Aws::Credentials.new(KEY,SECRET),region:'us-west-2')obj=s3.bucket('stg-db').object('key')obj.upload_file(filename)这似乎工作正常,除了该文件不是公开可用的,而且我无法获得它的公共(public)URL。但是当我登录到S3时,我可以正常查看我的文件。为了使其公开可用,我将最后一行更改为obj.upload_file(file

  8. ruby - 当使用::指定模块时,为什么 Ruby 不在更高范围内查找类? - 2

    我刚刚被困在这个问题上一段时间了。以这个基地为例:moduleTopclassTestendmoduleFooendend稍后,我可以通过这样做在Foo中定义扩展Test的类:moduleTopmoduleFooclassSomeTest但是,如果我尝试通过使用::指定模块来最小化缩进:moduleTop::FooclassFailure这失败了:NameError:uninitializedconstantTop::Foo::Test这是一个错误,还是仅仅是Ruby解析变量名的方式的逻辑结果? 最佳答案 Isthisabug,or

  9. ruby - 覆盖相似的方法,更短的语法 - 2

    在Ruby类中,我重写了三个方法,并且在每个方法中,我基本上做同样的事情:classExampleClassdefconfirmation_required?is_allowed&&superenddefpostpone_email_change?is_allowed&&superenddefreconfirmation_required?is_allowed&&superendend有更简洁的语法吗?如何缩短代码? 最佳答案 如何使用别名?classExampleClassdefconfirmation_required?is_a

  10. ruby - 获取模块中定义的所有常量的值 - 2

    我想获取模块中定义的所有常量的值:moduleLettersA='apple'.freezeB='boy'.freezeendconstants给了我常量的名字:Letters.constants(false)#=>[:A,:B]如何获取它们的值的数组,即["apple","boy"]? 最佳答案 为了做到这一点,请使用mapLetters.constants(false).map&Letters.method(:const_get)这将返回["a","b"]第二种方式:Letters.constants(false).map{|c

随机推荐