verilog分析task的接口设计,证明这种写法:assign {a,b,c,d} = links;

news/2024/9/25 17:19:43/

verilog分析task的接口设计,证明这种写法:assign {a,b,c,d} = links;

  • 1,task在状态机中的使用好处:
  • 2,RTL设计
  • 3,测试testbench
  • 4,波形分析,正确!

参考文献:
1,练习七-在Verilog中使用任务task

1,task在状态机中的使用好处:

在这里插入图片描述

2,RTL设计

//
//	设计一个模块
module	link_ports(
input			clk,
input			rst_n,input			p,
input			q,output			a,
output			b,
output			c,
output			d//output			out
);reg		[3:0]	links;
reg		[1:0]	state;//	判断是否 在rst_n后 的第一个clk,就实现输出结果:1111.
assign		{a,b,c,d}	= links;		//证明这种写法是对的!always@(posedge clk or negedge rst_n)		beginif(!rst_n)		beginstate		<= 2'b00;links		<= 4'b0000;endelse		//	来一个clk, 进行 1次任务.add;	
endtask	add;
begincasex(state)2'b00:	if(p == 0 && q == 0)	beginlinks	<= 4'b0101;state	<= 2'b01;end2'b01:	if(p == 0 && q == 1)	beginlinks	<= 4'b0110;state	<= 2'b10;end2'b10:	beginlinks	<= 4'b1001;state	<= 2'b11;end2'b11:	if(p ==1 && q == 0)	beginlinks	<= 4'b1111;state	<= 2'b00;enddefault:	begin		//	回到原态links	<= 4'b0000;state	<= 2'b00;endendcaseend
endtaskendmodule

3,测试testbench

//	
//	测试信号
module		tb_link_port;
reg			clk;
reg			rst_n;
reg			p, q;wire		a;
wire		b;
wire		c;
wire		d;
//	wire		out;always	#10	clk = ~clk;		// T = 20.
initial			beginrst_n	= 0;	clk = 1;	p = 0;	q = 0;
#10		rst_n	= 1;
//		repeat(8)	begin#20		p	= 0;	q	= 1;#20		p	= 1;	q	= 0;#100	$finish;
//		end
endlink_ports		u1_link_ports(
.clk		(clk		),
.rst_n		(rst_n		),
.p			(p			),
.q			(q			),.a			(a			),
.b			(b			),
.c			(c			),
.d			(d			)
);endmodule

4,波形分析,正确!

在这里插入图片描述


http://www.ppmy.cn/news/1450282.html

相关文章

区块链 | IPFS:CID

&#x1f98a;原文&#xff1a;Anatomy of a CID &#x1f98a;写在前面&#xff1a;本文属于搬运博客&#xff0c;自己留存学习。 1 CID 在分布式网络中与其他节点交换数据时&#xff0c;我们依赖于内容寻址&#xff08;而不是中心化网络的位置寻址&#xff09;来安全地定位…

STM32——点亮第一个LED灯

代码示例&#xff1a; #include "stm32f10x.h" // Device headerint main() {RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//开启时钟GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode GPIO_Mode_Out_PP;GPIO_InitSt…

【设计模式】17、iterator 迭代器模式

文章目录 十七、iterator 迭代器模式17.1 user_slice17.1.1 collection_test.go17.1.2 collection.go17.1.3 iterator.go17.1.4 user.go 十七、iterator 迭代器模式 https://refactoringguru.cn/design-patterns/iterator 为了集合数据的安全性, 或方便迭代, 可以用迭代器接口…

2023下半年软件设计师上午题——冒泡排序

快速排除法&#xff0c;根据冒泡排序特性&#xff0c;每一趟排序都会确实最大/最小值&#xff0c;故升序两趟后&#xff0c;最后两个元素应该是已经排序好的第二大&#xff0c;和最大的元素&#xff0c;所以排除B,D&#xff0c;再因为每次排序都会两两交换&#xff0c;所以排除…

更深层次理解传输层两协议【UDP | TCP】【UDP 缓冲区 | TCP 8种策略 | 三次握手四次挥手】

博客主页&#xff1a;花果山~程序猿-CSDN博客 文章分栏&#xff1a;Linux_花果山~程序猿的博客-CSDN博客 关注我一起学习&#xff0c;一起进步&#xff0c;一起探索编程的无限可能吧&#xff01;让我们一起努力&#xff0c;一起成长&#xff01; 目录 再谈端口号 端口号的返回…

前沿科技应用:AIGC技术的广泛渗透

✨✨ 欢迎大家来访Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭❤&#xff5e;✨✨ &#x1f31f;&#x1f31f; 欢迎各位亲爱的读者&#xff0c;感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢&#xff0c;在这里我会分享我的知识和经验。&am…

MacBook Pro 原生安装 Ubuntu 24.04 ARM 版

趁着休假整理家里闲置的设备&#xff0c;看到了一台许久不用的 M2 芯片的 MacBook Pro&#xff0c;想着或许应该把它改造成 ARMv64 的 CI/CD 构建机&#xff0c;于是就有了这篇文章。 本篇文章适用于 M1、M2 全系列的设备&#xff0c;包括&#xff1a;MacBook Air、MacBook Pr…

焊接机器人-常见焊接工艺参数

常见焊接工艺参数 常见焊缝平焊立焊 常见焊接工艺调试方法注意事项 常见焊缝 常见的焊缝一般见于不需要坡口焊的规则钢构件&#xff1a;如H型钢、H型牛角杠、T型梁、弧形梁等。 平焊 参数Value电流(安培)200A电压(伏特 )20V摆弧-振幅(毫米)4-6mm摆弧- 频率(Hz)1Hz摆弧- 两侧…