Verilog if语句阻断z状态传播

简介: Verilog if语句阻断z状态传播

一、测试代码

设置两组输入输出,对比使用assign赋值语句与always if语句。

  • if_assign_test.v
`timescale 1ns / 1ps
//
// Engineer: wkk
// Module Name: if_assign_test
//
module if_assign_test(
    input  if_a_in,
    input  if_b_in,
    input  if_c_in,
    input  if_d_in,
    
    input  assign_a_in,
    input  assign_b_in,
    input  assign_c_in,
    input  assign_d_in,
    
    output reg if_a_out,
    output reg if_b_out,
    output reg if_c_out,
    output reg if_d_out,
    
    output assign_a_out,
    output assign_b_out,
    output assign_c_out,
    output assign_d_out
);
assign assign_a_out = assign_a_in ? 1'b1:1'b0;
assign assign_b_out = assign_b_in ? 1'b1:1'b0;
assign assign_c_out = assign_c_in ? 1'b1:1'b0;
assign assign_d_out = assign_d_in ? 1'b1:1'b0;
always @( * )  begin
    if( if_a_in ) begin
        if_a_out = 1'b1;
    end else begin
        if_a_out = 1'b0;
    end
end
always @( * )  begin
    if( if_b_in ) begin
        if_b_out = 1'b1;
    end else begin
        if_b_out = 1'b0;
    end
end
always @( * )  begin
    if( if_c_in ) begin
        if_c_out = 1'b1;
    end else begin
        if_c_out = 1'b0;
    end
end
always @( * )  begin
    if( if_d_in ) begin
        if_d_out = 1'b1;
    end else begin
        if_d_out = 1'b0;
    end
end
endmodule
  • tb_if_assign_test.v
`timescale 1ns / 1ps
//
// Engineer: wkk
// Create Date: 2023/12/05 20:37:07
// Module Name: tb_if_assign_test
//
module tb_if_assign_test();
reg  if_a_in;
reg  if_b_in;
reg  if_c_in;
reg  if_d_in;
reg  assign_a_in;
reg  assign_b_in;
reg  assign_c_in;
reg  assign_d_in;
wire if_a_out;
wire if_b_out;
wire if_c_out;
wire if_d_out;
wire assign_a_out;
wire assign_b_out;
wire assign_c_out;
wire assign_d_out;
if_assign_test if_assign_test_inst (
    .if_a_in (if_a_in),
    .if_b_in (if_b_in),
    .if_c_in (if_c_in),
    .if_d_in (if_d_in),
    
    .assign_a_in(assign_a_in),
    .assign_b_in(assign_b_in),
    .assign_c_in(assign_c_in),
    .assign_d_in(assign_d_in),
    
    .if_a_out   (if_a_out),
    .if_b_out   (if_b_out),
    .if_c_out   (if_c_out),
    .if_d_out   (if_d_out),
    
    .assign_a_out(assign_a_out),
    .assign_b_out(assign_b_out),
    .assign_c_out(assign_c_out),
    .assign_d_out(assign_d_out)
);
initial  begin
    if_a_in = 1'b1;
    if_b_in = 1'b0;
    if_c_in = 1'bz;
    if_d_in = 1'bx;
    
    assign_a_in = 1'b1;
    assign_b_in = 1'b0;
    assign_c_in = 1'bz;
    assign_d_in = 1'bx;
    
    # 100;
    $finish;
end
endmodule

二、仿真结果

通过if ( 条件 ) 的方式,z态被阻断了。

相关文章
|
7月前
|
运维 Linux 网络安全
"揭秘Traceroute穿越防火墙的隐形障碍:为何路径追踪在此中断?解锁隐藏的网络回显之谜!"
【8月更文挑战第19天】Traceroute是网络故障排查的关键工具,用于追踪数据包路径。但防火墙常致回显问题,表现为路由节点信息缺失。本文通过案例分析此现象:数据包遇防火墙时,因安全策略拦截ICMP或UDP数据包而显示星号。解决方法包括检查防火墙策略以确保ICMP和UDP端口未被阻止,在Linux中使用ICMP版本的Traceroute(如`traceroute -I`),关闭防火墙接口管理功能,或调整安全策略以限制Traceroute访问。针对具体网络环境灵活运用这些策略可有效解决问题。
378 0
|
8月前
|
缓存
线程操纵术并行策略问题之工作窃取机制问题如何解决
线程操纵术并行策略问题之工作窃取机制问题如何解决
|
10月前
在事件冒泡中,如何区分需要阻止传播的事件和不需要阻止的事件
在事件冒泡中,如何区分需要阻止传播的事件和不需要阻止的事件
在事件冒泡中阻止特定事件的传播
在事件冒泡中阻止特定事件的传播
|
物联网
STM32:TIM输入捕获硬件部分(内含:1.输入捕获简介+2.频率测量+3.通用/高级定时器的输入捕获电路分析(重点)+4.主从触发模式+5.输入捕获基本结构(重点)+6.PWM基本结构)
STM32:TIM输入捕获硬件部分(内含:1.输入捕获简介+2.频率测量+3.通用/高级定时器的输入捕获电路分析(重点)+4.主从触发模式+5.输入捕获基本结构(重点)+6.PWM基本结构)
631 0
STM32:TIM输入捕获硬件部分(内含:1.输入捕获简介+2.频率测量+3.通用/高级定时器的输入捕获电路分析(重点)+4.主从触发模式+5.输入捕获基本结构(重点)+6.PWM基本结构)
《逻辑与计算机设计基础(原书第5版)》——2.7 门的传播延迟
本节书摘来自华章计算机《逻辑与计算机设计基础(原书第5版)》一书中的第2章,第2.7节,作者:(美)M.莫里斯·马诺(M. Morris Mano)著, 更多章节内容可以访问云栖社区“华章计算机”公众号查看。
3924 1
|
安全 网络协议 数据安全/隐私保护
域前置通信过程和溯源思路
域前置通信过程和溯源思路
1185 0
域前置通信过程和溯源思路
GoogleGuava - 第 1 章 基本工具——Throwables:简化异常和错误的传播与检查
GoogleGuava - 第 1 章 基本工具——Throwables:简化异常和错误的传播与检查
166 0
GoogleGuava - 第 1 章 基本工具——Throwables:简化异常和错误的传播与检查
|
开发者 Python
异常传播|学习笔记
快速学习 异常传播
116 0

热门文章

最新文章