多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國(guó)內(nèi)最全I(xiàn)T社區(qū)平臺(tái) 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當(dāng)前位置:首頁(yè) > 互聯(lián)網(wǎng) > 數(shù)字集成電路設(shè)計(jì)-13-常用模塊集錦

數(shù)字集成電路設(shè)計(jì)-13-常用模塊集錦

來(lái)源:程序員人生   發(fā)布時(shí)間:2014-10-08 18:35:13 閱讀次數(shù):3319次

引言

C語(yǔ)言,C++語(yǔ)言等軟件編程語(yǔ)言吸引我們的一個(gè)很重要的原因是他們都能提供非常豐富的函數(shù)庫(kù)供我們使用,大大提高coding的效率。

但是像verilogHDL等HDL語(yǔ)言這方面做的比較弱,尤其是可綜合的語(yǔ)法,基本沒(méi)有通用的模塊庫(kù)供我們使用,所以編碼效率會(huì)比較低。如果我們把平時(shí)經(jīng)常使用的一些模塊積累起來(lái),慢慢的標(biāo)準(zhǔn)化,這樣以后我們?cè)僭O(shè)計(jì)新的電路時(shí),就會(huì)方便很多,今天就是開(kāi)始。


1,判斷兩個(gè)信號(hào)是否相等


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,對(duì)一個(gè)one-hot的值,得到是對(duì)應(yīng)bit的十進(jìn)制數(shù)


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,上面函數(shù)的反向功能


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

在實(shí)際的電路設(shè)計(jì)中,低功耗(low-power)是我們必須時(shí)刻都需要謹(jǐn)記在心的一條法則,這條法則的具體實(shí)現(xiàn)中最重要的就是clock gage了。

但是一般情況下DC會(huì)提供專(zhuān)門(mén)的gating cell,在做仿真時(shí),我們還是需要一個(gè)簡(jiǎn)單的模型。


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,獲得信號(hào)的上升沿



module sig_posedge ( input clk, input signal, output signal_posedge ); reg tmp_r; always @(posedge clk) tmp_r <= signal; assign signal_posedge = signal & ~tmp_r; endmodule


6,獲得信號(hào)的下降沿


module sig_negedge ( input clk, input signal, output signal_negedge ); reg tmp_r; always @(posedge clk) tmp_r <= signal; assign signal_negedge = ~signal & tmp_r; endmodule


7,round-robin arbiter(2選1)


function [1:0] Fround_robin_2; input [1:0] req,req_en,grant_en; input priority_in; reg rq_a,rq_b,grant_a,grant_b,prio_a,prio_b; begin {rq_a,rq_b} = req; {prio_b,prio_a} = {priority_in==1'b1,priority_in==1'b0}; grant_a = ( prio_a & rq_a | prio_b & rq_a & ~rq_b); grant_b = ( prio_b & rq_b | prio_a & rq_b & ~rq_a); Fround_robin_2 = {grant_b,grant_a} & req_en & grant_en; end endfunction



8,round-robin arbiter(4選1)


function [3:0] Fround_robin_4; input [3:0] req,req_en,grant_en; input [1:0] priority_in; reg rq_a,rq_b,rq_c,rq_d; reg grant_a,grant_b,grant_c,grant_d; reg prio_a,prio_b,prio_c,prio_d; begin {rq_d,rq_c,rq_b,rq_a} = req; {prio_d,prio_c,prio_b,prio_a} = {priority_in==2'b11,priority_in==2'b10,priority_in==2'b01,priority_in==2'b00}; grant_a = ( prio_a & rq_a | prio_b & rq_a & ~rq_b & ~rq_c & ~rq_d | prio_c & rq_a & ~rq_c & ~rq_d | prio_d & rq_a & ~rq_d); grant_b = ( prio_b & rq_b | prio_c & rq_b & ~rq_c & ~rq_d & ~rq_a | prio_d & rq_b & ~rq_d & ~rq_a | prio_a & rq_b & ~rq_a); grant_c = ( prio_c & rq_c | prio_d & rq_c & ~rq_d & ~rq_a & ~rq_b | prio_a & rq_c & ~rq_a & ~rq_b | prio_b & rq_c & ~rq_b); grant_d = ( prio_d & rq_d | prio_a & rq_d & ~rq_a & ~rq_b & ~rq_c | prio_b & rq_d & ~rq_b & ~rq_c | prio_c & rq_d & ~rq_c); Fround_robin_4 = {grant_d,grant_c,grant_b,grant_a} & req_en & grant_en; end endfunction




9,round-robin arbiter(8選1)


function [7:0] Fround_robin_8; input [7:0] req,req_en,grant_en; input [2:0] priority_in; reg rq_a,rq_b,rq_c,rq_d,rq_e,rq_f,rq_g,rq_h; reg grant_a,grant_b,grant_c,grant_d,grant_e,grant_f,grant_g,grant_h; reg prio_a,prio_b,prio_c,prio_d,prio_e,prio_f,prio_g,prio_h; begin {rq_h,rq_g,rq_f,rq_e,rq_d,rq_c,rq_b,rq_a} = req; {prio_h,prio_g,prio_f,prio_e,prio_d,prio_c,prio_b,prio_a} = {priority_in==3'b111,priority_in==3'b110,priority_in==3'b101,priority_in==3'b100,priority_in==3'b011,priority_in==3'b010,priority_in==3'b001,priority_in==3'b000}; grant_a = ( rq_a & (prio_a |prio_b & ~rq_b & ~rq_c & ~rq_d & ~rq_e & ~rq_f & ~rq_g & ~rq_h |prio_c & ~rq_c & ~rq_d & ~rq_e & ~rq_f & ~rq_g & ~rq_h |prio_d & ~rq_d & ~rq_e & ~rq_f & ~rq_g & ~rq_h |prio_e & ~rq_e & ~rq_f & ~rq_g & ~rq_h |prio_f & ~rq_f & ~rq_g & ~rq_h |prio_g & ~rq_g & ~rq_h |prio_h & ~rq_h); grant_b = ( rq_b & (prio_b |prio_c & ~rq_c & ~rq_d & ~rq_e & ~rq_f & ~rq_g & ~rq_h & ~rq_a |prio_d & ~rq_d & ~rq_e & ~rq_f & ~rq_g & ~rq_h & ~rq_a |prio_e & ~rq_e & ~rq_f & ~rq_g & ~rq_h & ~rq_a |prio_f & ~rq_f & ~rq_g & ~rq_h & ~rq_a |prio_g & ~rq_g & ~rq_h & ~rq_a |prio_h & ~rq_h & ~rq_a |prio_a & ~rq_a); grant_c = ( rq_c & (prio_c |prio_d & ~rq_d & ~rq_e & ~rq_f & ~rq_g & ~rq_h & ~rq_a & ~rq_b |prio_e & ~rq_e & ~rq_f & ~rq_g & ~rq_h & ~rq_a & ~rq_b |prio_f & ~rq_f & ~rq_g & ~rq_h & ~rq_a & ~rq_b |prio_g & ~rq_g & ~rq_h & ~rq_a & ~rq_b |prio_h & ~rq_h & ~rq_a & ~rq_b |prio_a & ~rq_a & ~rq_b |prio_b & ~rq_b); grant_d = ( rq_d & (prio_d |prio_e & ~rq_e & ~rq_f & ~rq_g & ~rq_h & ~rq_a & ~rq_b & ~rq_c |prio_f & ~rq_f & ~rq_g & ~rq_h & ~rq_a & ~rq_b & ~rq_c |prio_g & ~rq_g & ~rq_h & ~rq_a & ~rq_b & ~rq_c |prio_h & ~rq_h & ~rq_a & ~rq_b & ~rq_c |prio_a & ~rq_a & ~rq_b & ~rq_c |prio_b & ~rq_b & ~rq_c |prio_c & ~rq_c); grant_e = ( rq_e & (prio_e |prio_f & ~rq_f & ~rq_g & ~rq_h & ~rq_a & ~rq_b & ~rq_c & ~rq_d |prio_g & ~rq_g & ~rq_h & ~rq_a & ~rq_b & ~rq_c & ~rq_d |prio_h & ~rq_h & ~rq_a & ~rq_b & ~rq_c & ~rq_d |prio_a & ~rq_a & ~rq_b & ~rq_c & ~rq_d |prio_b & ~rq_b & ~rq_c & ~rq_d |prio_c & ~rq_c & ~rq_d |prio_d & ~rq_d); grant_f = ( rq_f & (prio_f |prio_g & ~rq_g & ~rq_h & ~rq_a & ~rq_b & ~rq_c & ~rq_d & ~rq_e |prio_h & ~rq_h & ~rq_a & ~rq_b & ~rq_c & ~rq_d & ~rq_e |prio_a & ~rq_a & ~rq_b & ~rq_c & ~rq_d & ~rq_e |prio_b & ~rq_b & ~rq_c & ~rq_d & ~rq_e |prio_c & ~rq_c & ~rq_d & ~rq_e |prio_d & ~rq_d & ~rq_e |prio_e & ~rq_e); grant_g = ( rq_g & (prio_g |prio_h & ~rq_h & ~rq_a & ~rq_b & ~rq_c & ~rq_d & ~rq_e & ~rq_f |prio_a & ~rq_a & ~rq_b & ~rq_c & ~rq_d & ~rq_e & ~rq_f |prio_b & ~rq_b & ~rq_c & ~rq_d & ~rq_e & ~rq_f |prio_c & ~rq_c & ~rq_d & ~rq_e & ~rq_f |prio_d & ~rq_d & ~rq_e & ~rq_f |prio_e & ~rq_e & ~rq_f |prio_f & ~rq_f); grant_h = ( rq_h & (prio_h |prio_a & ~rq_a & ~rq_b & ~rq_c & ~rq_d & ~rq_e & ~rq_f & ~rq_g |prio_b & ~rq_b & ~rq_c & ~rq_d & ~rq_e & ~rq_f & ~rq_g |prio_c & ~rq_c & ~rq_d & ~rq_e & ~rq_f & ~rq_g |prio_d & ~rq_d & ~rq_e & ~rq_f & ~rq_g |prio_e & ~rq_e & ~rq_f & ~rq_g |prio_f & ~rq_f & ~rq_g |prio_g & ~rq_g); Fround_robin_8 = {grant_h,grant_g,grant_f,grant_e,grant_d,grant_c,grant_b,grant_a} & req_en & grant_en; end endfunction


10,簡(jiǎn)易同步fifo


module simple_syn_fifo #( parameter WIDTH = 32, parameter DEPTH = 4, parameter PTR_WIDTH = 2 ) ( input clk, input rst_n, input ren, input wen, input [WIDTH-1:0] din, output full, output empty, output valid, output [WIDTH-1:0] dout ); reg [WIDTH-1:0] mem_r[0:DEPTH-1]; reg [PTR_WIDTH-1:0] rptr_r; reg [PTR_WIDTH-1:0] wptr_r; reg [PTR_WIDTH:0] flag_r; always @(posedge clk) if(wen) mem_r[wptr_r] <= din; always @(posedge clk) if(~rst_n) wptr_r <= (PTR_WIDTH-1)'d0; else if(wen) wptr_r <= wptr_r + 1'b1; always @(posedge clk) if(~rst_n) rptr_r <= (PTR_WIDTH-1)'d0; else if(wen) rptr_r <= rptr_r + 1'b1; always @(posedge clk) if(~rst_n) flag_r <= PTR_WIDTH'd0; else if(wen & ~ren) flag_r <= flag_r + 1'b1; else if(~wen & ren) flag_r <= flag_r - 1'b1; assign dout = mem_r[rptr_r]; assign full = (flag_r >= DEPTH); assign empty = (flag_r == PTR_WIDTH'd0); assign valid = ren; endmodule




生活不易,碼農(nóng)辛苦
如果您覺(jué)得本網(wǎng)站對(duì)您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈(zèng)
程序員人生
------分隔線(xiàn)----------------------------
分享到:
------分隔線(xiàn)----------------------------
關(guān)閉
程序員人生
主站蜘蛛池模板: 午夜一级做a爰片久久毛片 午夜一区二区三区 | 国产亚洲一区二区三区不卡 | 中文字幕巨大乳在线看 | 校园 春色 欧美 另类 小说 | 第一福利在线观看永久视频 | 日本欧美一区二区三区片 | 欧美式free群乱 | 欧美色啪 | 亚洲国产精品免费在线观看 | 国产一级精品绿帽视频 | 亚洲成a人片在线观看中文!!! | 男女啪啪片 | 欧美福利网| 午夜精品久久久久久91 | 伊人俺去久久涩五月综合 | 在线免费观看福利 | 欧美18av| 一区二区三区不卡视频 | 久久精品中文 | 国产精品福利社 | 国产一区二区视频在线播放 | 最近最新中文字幕免费大全3 | 亚洲欧美极品 | 国产综合在线观看视频 | 另类 校园 春色 都市 亚洲 | 欧美精品人爱a欧美精品 | 精品久久久久久久一区二区手机版 | 中文字幕中文字幕中中文 | 亚洲欧美在线观看首页 | 男女精品视频 | 国产一区在线播放 | 国内精品一区二区三区东京 | 亚洲三级视频在线观看 | 亚洲m男在线中文字幕 | 国产精品久久久久久一区二区三区 | 亚洲精品自拍愉拍第二页 | 欧美喷| 国产三级高清 | 夜夜嗨视频网 | 国产成人啪精品午夜在线播放 | 欧美成视频人免费淫片 |