迭代电路学习分享

今天分享关于迭代电路的内容:

迭代电路中,需要对低位的内容的求解,并将答案提交到高位,高位利用地位的结果进行计算,并向更高位提交结果,从而获得最终的答案:

经典的迭代电路有串行加法器。

下面用一个奇校验器的例子进行说明:

module odd_checker(in,out,flag);
	parameter n=8;
	input [n-2:0]in;
	output [n-1:0]out ;
	output flag;
	
	wire [n-1:0]tmp;
	
	assign tmp={tmp[n-2:0]^in,1'b1};
	assign flag=tmp[n-1];
	assign out={tmp[n-1],in};

endmodule

这段verilog代码中:

核心在于assign tmp={tmp[n-2:0]^in,1'b1}这句

它会不断的迭代自身,从而获得最终的答案:

以in=7'b1000_111为例,讲解其具体步骤:

1:在第一布中,tmp的值是未定义的,所以为:7’bxxxx_xxx;它与1‘b1拼接赋值给了tmp,tmp为7’bxxxx_xx1(x与任何值异或仍然为x)。

2:在第二步时,此时tmp不全为x,因此在此次异或运算时,第七位得结果0,在将1‘b1拼接时,tmp为7’bxxxx_x01,

3:不断重复此步骤直至值被全部求解出来,在最后以为x被求解之后,tmp得值便固定下来,不会在发生变化。

4.是否需要添加1,取决与tmp得最高位,当为1时表示输入得1为偶数,需要添加1,从而满足奇校验器得要求

以下是仿真代码:

`timescale 1ns/1ps

module odd_checker_tb();
	parameter n=8;
	
	reg  [n-2:0]in;
	wire [n-1:0]out ;
	wire flag;

	odd_checker inst (
		.in(in),
		.out(out),
		.flag(flag)
	);

	initial begin
		in=7'b1110000;
		#20 
		in=7'b1100000;
		#20
		in=7'b1111111;
		#20
		in=7'b0000111;
		
		#20
		in=7'b0011110;
		#20
		in=7'b0000000;
		#20
		$stop;
	
	end 



endmodule 

我们经常使用得ASCII码就是一个7位数据,最高位位奇偶校验位得编码。

更多内容:参考斯坦福大学教授 威廉J.达利的数字设计系统方法中第八章,比较器一节内容。

                                                                                                                               2021/9/7

                                                                                                                                           完

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值