verilog偏门小知识(不定期更新)

1. 双向(可控)开关

目的是在顶层文件中实现对两个I2C模块的sda线进行选择,最初直接使用下述代码:

assign sda = ctrl ? sda_1 : sda_2 ;

可以发现当 sda 处于输出状态时,sda 在他们之中进行选择进行输出,是没有问题的;但 sda 如果是输入的话,明显就有问题了。

最初考虑把子模块 sda 的输入和输出都拉出来,先选择信号再写三态门,但这样很麻烦。

最后发现 verilog 原语里面有双向开关这么一个东西,即数据可以双向流动。

普通双向开关

tran 或 rtran ( tran 的高阻态版本 ) 开关实例语句的语法如下:

(r)tran [instance_name] (inout_a, inout_b) ;

端口表只有两个端口,并且无条件地双向流动,即从 signala 向 signalb ,反之亦然。

可控双向开关

tranif 或 rtranif 的实例语句的语法如下:

(r)tranif [instance_name] (inout_a, inout_b, ctrl);

前两个端口是双向端口,即数据从 signala 流向 signalb ,反之亦然。第三个端口是控制信号。对于 tranif0 和 tranif0,ctrl 为 0 时允许双向数据流动;对于 tranif1 和 rtranif1 ,ctrl 为 1 时允许双向数据流动。

对于 rtran、rtranif0 和 rtranif1 (高阻态版本),当信号通过开关传输时,信号强度减弱。

注意:vivado 综合不支持开关级源语!!!

Verilog中的tran门是一种模拟电路元件,用于实现模拟信号的传输和开关功能。tran门有三种类型:trantranif0和tranif1。其中,tran门是一个简单的传输门,当控制信号为1时,输入信号会被传输到输出端口。tranif0和tranif1门在控制信号为0和1时,分别允许和禁止信号传输。\[3\] 在Verilog中,可以使用关键字nmos和pmos来实例化tran门。例如,可以使用以下代码实例化一个nmos和pmos门: nmos n1(out, data, control); pmos p1(out, data, control); 另外,也可以不给出实例名称,直接引用nmos和pmos门。但是,建议在引用时给出实例名称,以提高代码的可读性。\[2\] 除了tran门,Verilog中还有其他类型的门,如and门、or门、not门等,用于实现不同的逻辑功能。这些门可以通过组合在一起来构建更复杂的电路。\[1\] 总之,tran门是Verilog中用于传输和开关模拟信号的一种元件,可以通过实例化nmos和pmos门来使用。 #### 引用[.reference_title] - *1* [Verilog-程序设计语句-三种建模方式](https://blog.csdn.net/weixin_43239805/article/details/123824621)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [三、5【Verilog HDL】基础知识之开关级建模](https://blog.csdn.net/ARM_qiao/article/details/124220910)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值