时序仿真中阻塞赋值和非阻塞赋值的区别

news/2024/9/29 21:23:27

1 实验设置

1.1 功能模块编写

设置8位的变量c,通过非阻塞赋值的方式,将同样为8位的变量a和变量b之间按位与的结果赋值给c,代码如下:

module test_a4_and_b4(clk,a,b,c,
);input 	wire 		clk;input	wire [7:0]	a;input	wire [7:0]	b;output 	reg  [7:0]	c = 0;//非阻塞赋值always @ (posedge clk) beginc <= a & b;endendmodule

1.2 激励代码编写

设置a和b的激励为随机8位0~255的数据,时钟用阻塞赋值,激励源a和b的产生分别用阻塞赋值和非阻塞赋值,数据变化时刻和上升沿同步。

`timescale 1ns/1ns
`define clk_period 20module test_a4_and_b4_tb;reg			clk;reg	 [7:0]	a;reg  [7:0]	b;wire [7:0]	c;test_a4_and_b4 test_a4_and_b4_inst(.clk 	(clk),.a 		(a),.b 		(b),.c 		(c));always #(`clk_period/2) clk = ~clk;always #(`clk_period/2) a = {$random}%256;always #(`clk_period/2) b = {$random}%256;initial beginclk = 0;a = 0;b = 0;endendmodule

2 实验分析

2.1 阻塞赋值分析

激励源a和b的产生用阻塞赋值:

	always #(`clk_period/2) a = {$random}%256;always #(`clk_period/2) b = {$random}%256;

仿真波形如下:

image-20240510213726797

可以看到,当处于第2个时钟上升沿时,c为a和b变化后的值按位与的值。

2.2 非阻塞赋值分析

激励源a和b的产生用非阻塞赋值:

	always #(`clk_period/2) a <= {$random}%256;always #(`clk_period/2) b <= {$random}%256;

仿真波形如下:

image-20240510214459798

可以看到,当处于第2个时钟上升沿时,c为a和b变化前的值按位与的值。

3 实验结论

若时钟和激励源同时变化:

(1)如果激励源使用阻塞赋值,仿真工具会认为时钟和激励源同时变化,则上升治会采集到激励源变化之后的值。

(2)如果激励源使用非阻塞赋值,仿真工具会认为激励源晚于时钟变化,则上升治会采集到激励源变化之前的值。

非阻塞赋值发生赋值的时刻晚于阻塞赋值0ns

仿真时,激励源的赋值需使用非阻塞赋值。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/29977.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

项目冲刺——第四篇Scrum冲刺博客

作业所属课程 所属课程作业要求 作业要求作业目标 总结第三天的敏捷开发,安排好第四天敏捷开发冲刺一、站立式会议 1、会议图片2、昨天已完成的内容成员 任务肖杨、梁丽贤 完成贴子发布模块设计黄诃华、欧文杰 完成邮箱发送功能功能姚佳如、李慧娣 完成个人信息界面的设计廖莹…

【第三章】推荐系统冷启动问题

推荐系统需要根据用户的历史行为和兴趣预测用户未来的行为和兴趣,在没有足够初始数据的情况下,设计个性化推荐系统并且让用户对推荐结果满意从而愿意使用推荐系统,就是冷启动的问题。 3.1 冷启动问题简介用户冷启动:新用户没有历史数据 物品冷启动:将新物品推荐给可能对它…

kettle从入门到精通 第五十八课 ETL之kettle HTTP post使用教程

1、今天群里有位朋友问我有没有关于调用http接口的kettle 示例,我下意识的去翻我的公众号推文,愣是没找到。果断开始撸。 2、本次演示流程通过调用接口【网易云音乐随机歌曲】,然后解析返回的数据,接口信息如下图所示:3、本次演示流程通过调用接口【网易云音乐随机歌曲】,…

通过Docker Compose部署GitLab和GitLab Runner(一)

GitLab 是一个用于版本控制、项目管理和持续集成的开源软件平台,它提供了一整套工具,能够帮助团队高效地协作开发。而 GitLab Runner 则是 GitLab CI/CD 的执行者,用于运行持续集成和持续交付任务。 在本文中,我们将使用 Docker Compose 来快速部署 GitLab 和 GitLab Runne…

d3d12龙书阅读----绘制几何体(下)

d3d12龙书阅读----绘制几何体(下) 本节在上一节的基础上,对整个绘制过程进行优化,将绘制单个几何体的内容拓展到了多个几何体,同时对根签名进行了进一步地探索。 帧资源 在之前绘制每帧的结尾,我们都要使用flushingcommandqueue方法,要一直等待gpu执行完所有命令,才会继…

如何使用postman测试带Token的登录以及其他的测试接口

参考文章:https://blog.csdn.net/xzytl60937234/article/details/845009371.Postman设置变量并访问 点击右上角眼睛,在Globals选项中,选择edit 然后add 在弹出的页面中:,填写token 填写成功之后,右下角,点击save 在登录接口中,Test 选项中加入以下代码 var data = JSO…

PTA-1002

原先主要错误: 没有考虑到有关0的相关情况观看的大佬代码整理思路无非就是在相同的指数的情况下,系数相加 因为最后是要从大到小输出来。注意要对最后的结果进行四舍五入; PTA的英语题对英语不好的我真心不友好。#include<map> #include<cmath> #include<iost…

【笔记】通过目标编码和分类损失的神经场分类器【ICLR2024】

这是一篇发表在 ICLR 2024 会议上的学术论文的阅读笔记,题为“通过目标编码和分类损失的神经场分类器”,作者来自北京交通大学和百度研究院。 为什么会找到这篇文章,因为文章的一个作者是HKUST一个基础实验室的,搞的是偏底层的算法理论,所以自然就顺下来了。但是看完之后发…