数字集成电路设计-13-常用模块集锦

引言

C语言,C++语言等软件编程语言吸引我们的一个很重要的原因是他们都能提供非常丰富的函数库供我们使用,大大提高coding的效率。

但是像verilogHDL等HDL语言这方面做的比较弱,尤其是可综合的语法,基本没有通用的模块库供我们使用,所以编码效率会比较低。如果我们把平时经常使用的一些模块积累起来,慢慢的标准化,这样以后我们再设计新的电路时,就会方便很多,今天就是开始。


1,判断两个信号是否相等


function Fcompare;
	input valid_a,valid_b;
	input [31:0] a,b;

	Fcompare = valid_a & valid_b & (({32{valid_a}} & a) == ({32{valid_b}} & b));

endfunction


2,对一个one-hot的值,得到是对应bit的十进制数


function [2:0] Fcode_8b;
	input [7:0] one_hot;

	Fcode_8b =( one_hot[0] ? 3'd0 :
				one_hot[1] ? 3'd1 :
				one_hot[2] ? 3'd2 :
				one_hot[3] ? 3'd3 :
				one_hot[4] ? 3'd4 :
				one_hot[5] ? 3'd5 :
				one_hot[6] ? 3'd6 :
				one_hot[7] ? 3'd7 : 3'd0;
				);

endfunction


3,上面函数的反向功能


function [7:0] Fdecode_8b;
	input [2:0] value;

	Fdecode_8b =( value==3'd7,value==3'd6,value==3'd5,value==3'd4,value==3'd3,value==3'd2,value==3'd1,value==3'd0 );

endfunction


4,clock gage

在实际的电路设计中,低功耗(low-power)是我们必须时刻都需要谨记在心的一条法则,这条法则的具体实现中最重要的就是clock gage了。

但是一般情况下DC会提供专门的gating cell,在做仿真时,我们还是需要一个简单的模型。


module clk_gate
(
input enable,
input clk,
output clk_o
);

reg not_gate;

always @(enable or clk)
	if(~clk)
		not_gate = enable;
		
assign clk_o = clk & not_gate;

endmodule


5,获得信号的上升沿



module sig_posedge
(
input clk,
input signal,

output signal_posedge
);

	reg tmp_r;

	alwa
  • 9
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值