verilog中两个模块使用同一信号线时,怎样使得信号线在特定情况下连接到相应的模块?

本文介绍了在Verilog中如何处理两个模块M1和M2共用同一输入输出信号线data_in和data_out的问题。通过状态机控制,在特定状态下连接到相应模块的信号线。在顶层模块中,利用阻塞赋值根据状态机状态切换连接,并使用媒介信号进行数据传递。
摘要由CSDN通过智能技术生成

问题描述:
假设当前有两个verilog 模块M1和M2,分别完成不同的工作,但是二者使用了相同的硬件信号线,比如相同的输入data_in ,输出信号线 data_out。在硬件连接层面的确只有两根信号线,data_in 和data_out ,但是在特定情况下,比如需要使用M1模块时,那么应当将信号线的输入输出连接到M1的响应信号上,怎样和M2区别开呢?
首先,在一个工程中何时运行M1,何时运行M2,应当是由定义的,那就需要定义一个状态机程序,靠状态机实现状态的跳转。(三段式状态机,在我的其他文章中有特意介绍)
解决办法:比如在定义的这个状态机中有状态M1和M2,接下来将使用最简单的阻塞赋值的办法实现硬件信号线的分配:
需要提及的是,在工程顶层(或者其他需要调用这两个模块的地方)调用其他模块时,顶层和模块的连接方式应该清楚,此处不做详细介绍,只做简要举例如下
M1 instance M1_TOP
(
.data_out(data_out_topM1),//输出信号
.data_in(data_out_topM1)
);
//按照此格式描述信号, 左侧点 . 的后面是M1中的信号,右侧括号内是调用模块中与被调用模块中信号对应的信号,可以认为二者是连接在一起的,data_out_topM1此类的连接类信号,需要定义为wire 型

使用以下的语句实现当状态机运行到不同状态时顶层硬件信号线与特定模块中的信号相互连接:
assign DATA_OUT

目 录 译者序 前言 第1章 简介 1 1.1 什么是Verilog HDL? 1 1.2 历史 1 1.3 主要能力 1 第2章 HDL指南 4 2.1 模块 4 2.2 延 5 2.3 数据流描述方式 5 2.4 行为描述方式 6 2.5 结构化描述形式 8 2.6 混合设计描述方式 9 2.7 设计模拟 10 第3章 Verilog语言要素 14 3.1 标识符 14 3.2 注释 14 3.3 格式 14 3.4 系统任务和函数 15 3.5 编译指令 15 3.5.1 `define和`undef 15 3.5.2 `ifdef、`else 和`endif 16 3.5.3 `default_nettype 16 3.5.4 `include 16 3.5.5 `resetall 16 3.5.6 `timescale 16 3.5.7 `unconnected_drive和 `nounconnected_drive 18 3.5.8 `celldefine 和 `endcelldefine 18 3.6 值集合 18 3.6.1 整型数 18 3.6.2 实数 19 3.6.3 字符串 20 3.7 数据类型 20 3.7.1 线网类型 20 3.7.2 未说明的线网 23 3.7.3 向量和标量线网 23 3.7.4 寄存器类型 23 3.8 参数 26 第4章 表达式 28 4.1 操作数 28 4.1.1 常数 28 4.1.2 参数 29 4.1.3 线网 29 4.1.4 寄存器 29 4.1.5 位选择 29 4.1.6 部分选择 29 4.1.7 存储器单元 30 4.1.8 函数调用 30 4.2 操作符 30 4.2.1 算术操作符 31 4.2.2 关系操作符 33 4.2.3 相等关系操作符 33 4.2.4 逻辑操作符 34 4.2.5 按位操作符 35 4.2.6 归约操作符 36 4.2.7 移位操作符 36 4.2.8 条件操作符 37 4.2.9 连接和复制操作 37 4.3 表达式种类 38 第5章 门电平模型化 39 5.1 内置基本门 39 5.2 多输入门 39 5.3 多输出门 41 5.4 三态门 41 5.5 上拉、下拉电阻 42 5.6 MOS开关 42 5.7 双向开关 44 5.8 门延 44 5.9 实例数组 45 5.10 隐式线网 45 5.11 简单示例 46 5.12 2-4解码器举例 46 5.13 主从触发器举例 47 5.14 奇偶电路 47 第6章 用户定义的原语 49 6.1 UDP的定义 49 6.2 组合电路UDP 49 6.3 序电路UDP 50 6.3.1 初始化状态寄存器 50 6.3.2 电平触发的序电路UDP 50 6.3.3 边沿触发的序电路UDP 51 6.3.4 边沿触发和电平触发的混合行为 51 6.4 另一实例 52 6.5 表项汇总 52 第7章 数据流模型化 54 7.1 连续赋值语句 54 7.2 举例 55 7.3 线网说明赋值 55 7.4 延 55 7.5 线网延 57 7.6 举例 57 7.6.1 主从触发器 57 7.6.2 数值比较器 58 第8章 行为建模 59 8.1 过程结构 59 8.1.1 initial 语句 59 8.1.2 always语句 61 8.1.3 两类语句在模块使用 62 8.2 序控制 63 8.2.1 延控制 63 8.2.2 事件控制 64 8.3 语句块 65 8.3.1 顺序语句块 66 8.3.2 并行语句块 67 8.4 过程性赋值 68 8.4.1 语句内部延 69 8.4.2 阻塞性过程赋值 70 8.4.3 非阻塞性过程赋值 71 8.4.4 连续赋值与过程赋值的比较 72 8.5 if 语句 73 8.6 case语句 74 8.7 循环语句 76 8.7.1 forever 循环语句 76 8.7.2 repeat 循环语句 76 8.7.3 while 循环语句 77 8.7.4 for 循环语句 77 8.8 过程性连续赋值 78 8.8.
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值