数据流级建模

数据流级建模

逻辑电路的verilog代码一共有三种建模方式,分别是门级建模,数据流级建模和行为级建模。今天就介绍一下数据流级建模吧。

1. 数据流级建模范例:
1)4输入3输出表达式和电路图:

g=x1x3+x2x4
h=(x1+~x3)(~x2+x4)
f=g+h

在这里插入图片描述
2)实现代码

module	example4(x1, x2, x3, x4, f, g, h);
	input x1, x2, x3, x4;
	output f, g, h;
	
	assign g = (x1 & x3) | (x2 & x4);
	assign h = (x1 | ~x3) & (~x2 | x4);
	assign f = g | h;
	
endmodule

3)测试代码

module test;
	reg x1, x2, x3, x4;
	wire f, g, h;
	
	initial
	begin 
		x1 = 1'b0;
		x2 = 1'b0;
		x3 = 1'b0;
		x4 = 1'b0;
		#10 x1 = 1'b1;
		#10 x2 = 1'b1;
		#10 x3 = 1'b1;
		#10 x4 = 1'b1;
		#20 $stop;
	end
	example4 myexample4(x1,x2,x3,x4,f,g,h);

endmodule

4)仿真验证
在这里插入图片描述
2.数据流级建模基本语法
数据流建模语句也称为连续赋值语句,用于对线网的赋值,以关键字 assign 作为语法标识出来,其基本语法结构如下:

assign 线网信号名 = 运算表达式;

例如前面的例子中的建模语句都是满足这个结构的:

	assign g = (x1 & x3) | (x2 & x4);
	assign h = (x1 | ~x3) & (~x2 | x4);
	assign f = g | h;

使用数据流级建模是要注意:在等式的左侧出现的一定要是线网类型,即在之前的声明部分定义为wire类型线网名,宽度可以是一位也可以是多位,绝对不能是 reg 类型的寄存器名。 reg 类型是行为级建模语句中使用的,这一点初学者一定要加以区分。

数据流从数据的流动角度来描述整个电路,就像描述一条河流的走向一样,要在哪里转弯,要在哪里分岔,所以大多数情况下它依然离不开基本的电路结构图或逻辑表达式。但是数据流语句的描述重点是数据如何在电路中“流动”,即数据的传输和变化情况,所以体现在描述语句中,重点是在整个电路从输入到输出的过程中,输入信号经过哪些处理或者运算,最终才能得到最后的输出信号。而这些数据的处理过程,就是等式右侧的运算表达式。
运算表达式有两部分组成:操作数和操作符。操作数就是要处理的数据,操作符就是要对这些数据做的处理方式。操作数和操作符的种类都很多,这里就不一一赘述了。

3.视频内容连接:
数据流级建模视频

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值