(完整word版)数字模块实例-Verilog_第1页
(完整word版)数字模块实例-Verilog_第2页
(完整word版)数字模块实例-Verilog_第3页
(完整word版)数字模块实例-Verilog_第4页
(完整word版)数字模块实例-Verilog_第5页
已阅读5页,还剩57页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、一、加、减法器 21、半加器 22、全加器 23、串行进位加法器(行波进位加法器) 44、超前进位加法器(先行进位加法器) 45、进位链加法 器、 跳跃进位加法 器 76、进位旁路加法器、线性进位选择加法器等 97、减法器 9二、乘法器 101、定点原码乘法器 102、加法树乘法器 123、查找表乘法器 134、布尔乘法器 14三、CORDIC数字计算机18四、Johnson 计数器 21五、移位寄存器 221 、串并转换模块 222 生成伪随机数及伪随机序列应用设计 243 桶形移位寄存器(循环移位寄存器) 27六、编码译码器 291 、差错控制编码 292、 HDB3 编码与译码 373

2、曼彻斯特编译码器 39RS(204,1 88 )译码器 464、 Gray 码与二进制码的转换 465、NRZI 编码 46七、加密解密模块 481、DES加密模块48亠、加、减法器1、半加器半加器:输入为两个二进制数,输出产生两个二进制数,一个和位、一个进位,不包括S -AfB +ABf来自低位的进位。逻辑表达式为:(,其电路符号为:;$LLq82、全加器在将两个多位二进制数相加时,除了最低位以外,每一位都应该考虑来自低位的进位, 这种运算为全加,其电路为全加器。逻辑表达式为Cl*co-AxryLvz7亠 * *F 1">vc由半加器组成的结构如下:Verilog 模型mod

3、ule addl (ab/Cis,co> f/ data flow style input a,br ci;output s,co;assign 3= a ' b " ci;assign co - (a & b) l (b & ci) |(ci & a);endmodule或module fa_behavioral (a, b, cilf s, co); / behavioral style input a,bfci;output s,co;assign cof s J - a + b + ci;endmodule3、串行进位加法器(行波进位加法

4、器)依次将低位全加器的进位输出端CO接到高位全加器的进位输入端 C,就可以构成多位加法器。co/二进制行波进位加法器module ripple_carry_adder(x, y, cin, sum, cout);parameterN = 8;in putcin;in put N-1:0x, y;output N-1:0sum;outputcout;reg cout;reg N-1:0sum;reg qN:0;always (x or y or cin )begi n:ADDERin teger i;q0 = cin;for(i=0; i<=N-1; i=i+1)beg inqi+1 =

5、(xi&yi) | (xi&qi) | (yi&qi); sumi = xi A yi A qi;endcout = qN;enden dmodule4、超前进位加法器(先行进位加法器)产生进位输出的情况是 AB=1、A+B=1且 CI=1, 则得< cn)( = G. + 巴(口儿< uc) f = a + r cn G卡尸'G +匚巴-.Gy * P “八口Ki=G + P,6_ + 尺 Pj_,亿* 一* P.P,p +尸”尸尸。< c»Si =(AtB; +VE)(CV): +(AiBiA:B:)(Cr)i=(f)(«

6、;):+( 4 tB.)1 (CO ;二A岛厲( CD高位的进位输入不用等到低位计算完后就可得到,提高了计算速度,其电路结构如下:其电路符号Verilog 描述:module mdd2 rt>. U 9 ” Q S );inputC ;OUl t f>UL t6 Ps ;i cns =u fa. s s i cjn<3=a & by>assignP =a 1 b;endmoduleGP生成器:module q_p (gr pr c_inr g_out, p_out, c_out); input 1:0 g, p;input c_in;output g_outtp

7、_out,Cout;assign g_out g1 I p1& g0;assign p_out = p1& p0;assign c_out = g(0 I p0& c_in;endmodule使用两个一位加法器与一个GP生成器设计两位的超前进位加法器module cla_2 (a r b,c_in, g_out tp_out f s);input 1:0 b;input c_in;output g_out tp_out;output 1:0 s;wire 1:0 g,p;w i re cout;add addO (a0,b0 r c_i n,g0rp0,s0);add

8、addl <a(lrbl,c_outt gl,pl,sl> g_p g_pO (g,p,c_in, q_out,p_outr c_out);endmodule同样可以进行继续扩展a3| b| 引 s31421 b2J &2al b11 Mil a|OI NOT sO5、进位链加法器、跳跃进位加法器module carry_cha in _adder(x, y, cin, sum, cout);parameter in put in put DSIZE-1:0 output DSIZE-1:0 outputDSIZE = 8;cin;x, y;sum;cout;sum;reg

9、 cout, qDSIZE:0, pDSIZE-1:0, gDSIZE-1:0; reg DSIZE-1:0always (x or y or cin )begi n:ADDER in teger i;q0 = cin;for(i=0; i<DSIZE; i=i+1)beg inpi = xyi;gi = yi;qi+1 = (pi)?qi:gi; sumi = piAqi;end cout = qDSIZE;end en dmodule/进制跳跃进位加法器module carry_skip_adder(x_in, y_in, c_in, sum, c_out);parameterDSI

10、ZE = 12;parameterS = 4;inputc_in;input DSIZE-1:0x_in, y_in;output DSIZE-1:0sum;reg DSIZE-1:0 sum;outputc_out;regc_out;integer i, j;reg DSIZE:0 q;always (x_in or y_in or c_in)beginq0 = c_in;begin carry_skip_add_cell(x_inS-1:0, y_inS-1:0, q0, qS:1);for(j=0; j<=S-1; j=j+1)sumj = x_inj人 y_inj人 qj;car

11、ry_skip_add_cell(x_in2*S-1:S, y_in2*S-1:S, qS, q2*S:S+1);for(j=0; j<=S-1; j=j+1)sumS+j = x_in S+j A y_in S+j人 qS+j;carry_skip_add_cell(x_in3*S-1:2*S, y_in3*S-1:2*S, q2*S, q3*S:2*S+1);for(j=0; j<=S-1; j=j+1)sum2*S+j = x_i n2*S+j人 y_i n2*S+j人 q2*S+j;endc_out = qDSIZE;end/ S 比特分组进位链task carry_ski

12、p_add_cell;input S-1:0 x, y;input cin;output S:1 cout;reg qS:0, pS-1:0, gS-1:0, accumulator, generalized_p; integer i;beginq0 = cin;for(i=0; i<=S-1; i=i+1)beginpi = xiAyi;gi = yi; qi+1 = (pi)?qi:gi;endaccumulator = p0;for(i=1; i<=S-1; i=i+1)accumulator = accumulator & pi;gen eralized_p = a

13、ccumulator;coutS = (ge neralized_p) ? c_in : qS; for(i=1; i<=S-1; i=i+1)cou ti = qi;enden dtasken dmodule6、进位旁路加法器、线性进位选择加法器等 7、减法器使用一b = b+ 1,我们可以用设计好的加法器来实现减法操作:a b = a + (b) = a + b + 1图3,8是4位二进制数加减法器的电路图。图中的输人信号sub为1时做减 法,为0时做加法'做减法时异或门刚好用来对b取反裏这是因为:b©l =b, IM b © 0 = bo图玄8 4位二进

14、制数加减法器Verilog模型如下:图3.8电路的Verilog HDL代码如下。对ci及b和sub的异或输出分别为cib及 bb,式中4sub是把sub扩展成4位©module addsub4 (a b,ci,sub,sf co);input 3:0 a A b;input CX;input sub; / 1: sub; 0: addoutput 3:01 s;output co;wire cib * ci ' sub;wire 3:0 bb = b - 4subwire (2:01 cout;addladder0(a0/bb0fcib,30Lcout(0);add!add

15、erl(al.bblbcout(0)tSlfcout1);addladder2(a2fbb2,cout11,s(2Lcout(2>addladders a3bbb3hcout 2 ts3bco);eri'dircdule1、定点原码乘法器乘数与被乘数分别载入两个寄存器R1与R2中。此外,还有一个寄存器 A, A的初始值为0。运算时,控制逻辑每次读乘数的一位。若R1的最低位为1,则被乘数与 A寄存器相加,并将结果存于 A寄存器。然后,A、R1这两个寄存器整体右移一位,A的最高位变成0,且A0进入R1的最高位,而R1的最低位丢弃。若R1的最低位是0,则只需进行移位,不进 行加法。产生

16、的2n位乘积存于A与R1寄存器中。32位定点原码一位乘法流程图如下:Verilog参考代码: module mult(start,resten,x,y,z,);inputinputresten;start;reg busy;input2:0x;input2:0y;output 5:0z;reg 5:0z;reg 2:0reg_x;reg 2:0reg_y;reg 3:0A;reg 2:0temp_x;integer i;always(x or y or resten or start) beginif(!resten)beginA = 4'bO; reg_x = 3'bO; r

17、eg_y = 3'b0;temp_x= 3'b0; z = 6'b0;busy = 0;end else if(start) beginreg_x = x;reg_y = y;busy = 1; A =4'b0;end else beginif(busy)for (i=0;i<3;i=i+1) begin if(yi)temp_x = x; else temp_x = 3'b000;A= A+1'b0,temp_x;reg_y = A0,reg_y2:1; A= A>>1;end z=A,reg_y;busy=0;endend

18、endmodule2、加法树乘法器module add_tree_mult (out,a,b,clk);output15:0 out;input7:0 a,b;input clk;wire15:0 out;wire14:0 out1,c1;wire12:0 out2;wire10:0 out3,c2;wire8:0 out4;reg14:0 temp0;reg13:0 temp1;reg12:0 temp2;reg11:0 temp3;reg10:0 temp4;reg9:0 temp5;reg8:0 temp6;reg7:0 temp7;function7:0 mux8_1;input7:0

19、 operand;input sel;beginmux8_1= (sel) ? (operand) : 8'b00000000; endendfunctionalways (posedge clk)begintemp7<=mux8_1(a,b0);temp6<=(mux8_1(a,b1)<<1);temp5<=(mux8_1(a,b2)<<2);temp4<=(mux8_1(a,b3)<<3);temp3<=(mux8_1(a,b4)<<4);temp2<=(mux8_1(a,b5)<<5)

20、;temp1<=(mux8_1(a,b6)<<6);temp0<=(mux8_1(a,b7)<<7);endassign out1 = temp0 + temp1;assign out2 = temp2 + temp3;assign out3 = temp4 + temp5;assign out4 = temp6 + temp7;assign c1 = out1 + out2;assign c2 = out3 + out4;assign out = c1 + c2;endmodule查找表乘法器是将乘积直接存放在存储器中, 将操作数作为地址访问存储器, 得到

21、的输出数据就是乘法器的结果。查找表乘法器的速度只局限于所使用存储器的存取速度。module lookup_mult(out,a,b,clk);output7:0 out;input3:0 a,b;input clk;reg7:0 out;reg1:0 firsta,firstb;reg1:0 seconda,secondb;wire3:0 outa,outb,outc,outd;always (posedge clk)beginfirsta = a3:2; seconda = a1:0;firstb = b3:2; secondb = b1:0;end lookup m1(outa,first

22、a,firstb,clk),m2(outb,firsta,secondb,clk), m3(outc,seconda,firstb,clk),m4(outd,seconda,secondb,clk);always (posedge clk)beginout = (outa << 4) + (outb << 2) + (outc << 2) + outd; end endmodulemodule lookup(out,a,b,clk);output3:0 out; input1:0 a,b; input clk; reg3:0 out; reg3:0 addr

23、ess; always (posedge clk) begin address = a,b; case(address) 4'h0 : out = 4'b0000; 4'h1 : out = 4'b0000; 4'h2 : out = 4'b0000; 4'h3 : out = 4'b0000; 4'h4 : out = 4'b0000; 4'h5 : out = 4'b0001; 4'h6 : out = 4'b0010; 4'h7 : out = 4'b0011;

24、 4'h8 : out = 4'b0000; 4'h9 : out = 4'b0010; 4'ha : out = 4'b0100; 4'hb : out = 4'b0110; 4'hc : out = 4'b0000; 4'hd : out = 4'b0011; 4'he : out = 4'b0110; 4'hf : out = 4'b1001; default : out='bx;endcaseendendmodule4、布尔乘法器Booth 算法通过以

25、移位代替某些运算来提高乘法的运算速度。 Booth 算法是补码乘法的 算法,基本公式为:X*Y补=凶补*Y n-1Y n-2.YOHX补*Yn。公式说明如果乘数为正,则将 乘数的尾数与被乘数相乘即可, 如果乘数为负, 那么在乘法运算之后, 还要再减去被乘数才能得到最后的乘积。公式变形为X*Y补=X补*2An(Yn-1-Yn)+2n-1(Yn-2-Yn-1)+ +2人0(0-丫0)。 从变形公式中可以看出, 如果在乘数Y的末位Y0之后再增设一个附加位 Y-1,其初始值为0, 对乘数Y的值并无影响,则( Yi-1,Y)X补就是每一次的部分积,该部分的位权就是2Ai。这种方法即为补码一位乘,即每次只

26、处理一位乘数。运算流程:乘数与被乘数分别载入Q和M寄存器内,同时,还有一个1位寄存器,位于Q寄存器最低位 Q0的右边,成为 Q'乘法的结果出现在 A和Q寄存器中。A与Q'初始 值为0。控制逻辑也是每次扫描乘数的一位,但同时它也要检查右边的一位。若两位相同, 则A、Q和Q'寄存器的所有位向右移一位。若两位不同,则根据两位是1-0还是0-1,决定被乘数加到A寄存器,还是有 A寄存器减去被乘数,加减之后再右移一位。也就是说,右 移总是要进行的。右移是 A,Q,Q'的右移且是算术右移(算术移位:算术左移时,右端(低 位)补0,左端(高位)部分舍去;右移保证符号位不改变)

27、。设计流程图为:示例:A ooooQ0011Ql0M oni初始loot001100111A-AM第丨周期non10011Dill務位1I1Q010010111010101001oilA-A+M第3删001010100011】coolOlOi0Oil!移位Verilog示例代码:module booth_mult(product,ready,word1,word2,start,clock,reset);parameter L_word=4;parameter L_brc=2;parameter AII_Ones=4'b1111;parameter AII_Zeros=4'b00

28、00;output 2*L_word-1:0product;output ready;input L_word-1:0word1,word2;input start,clock,reset;wire load_words,shift,add,sub,ready;wire L_brc-1:0brc;Datapath_Booth m1(product,m0,word1,word2,load_words,shift,add,sub,clock,reset);Controller_Booth m2(load_words,shift,add,sub,read,m0,start,clock,reset);

29、endmodule/控制模块module Controller_Booth(load_words,shift,add,sub,ready,m0,start,clock,reset);parameter L_word=4;parameter L_state=4;parameter L_brc=2;output load_words,shift,add,sub,ready; input start,clock,reset;input m0;reg L_state-1:0state,nextstate;parameter S_idle=0,S_1=1,S_2=2,S_3=3,S_4=4,S_5=5,

30、S_6=6,S_7=7,S_8=8; reg load_words,shift,add,sub;wire ready=(state=S_idle)&&!reset)|(state=S_8);reg m0_del;wire L_brc-1:0brc=m0,m0_del; always(posedge clock or posedge reset) if(reset)state<=S_idle;else state<=nextstate; always(posedge clock or posedge reset) if(reset)m0_del<=0;else

31、if(load_words)m0_del<=0;else m0_del<=m0; always(state or start or brc)begin load_words=0;shift=0;add=0;sub=0;case(state)S_idle: if(start)begin load_words<=1;nextstate<=S_1;endelse nextstate<=S_idle;S_1: if(brc=0)|(brc=3)begin shift=1;nextstate<=S_3;endelse if(brc=1)begin add=1;next

32、state<=S_2;endelse if(brc=2)begin sub=1;nextstate<=S_2;endS_3: if(brc=0)|(brc=3)begin shift=1;nextstate<=S_5;endelse if(brc=1)begin add=1;nextstate<=S_4;endelse if(brc=2)begin sub=1;nextstate<=S_4;endS_5: if(brc=0)|(brc=3)begin shift=1;nextstate<=S_7;endelse if(brc=1)begin add=1;ne

33、xtstate<=S_6;endelse if(brc=2)begin sub=1;nextstate<=S_6;endS_7: if(brc=0)|(brc=3)begin shift=1;nextstate<=S_8;endelse if(brc=1)begin add=1;nextstate<=S_8;endelse if(brc=2)begin sub=1;nextstate<=S_8;endS_2: begin shift=1;nextstate=S_3;endS_4: begin shift=1;nextstate=S_5;endS_6: begin

34、shift=1;nextstate=S_7;endS_8: if(start) begin load_words=1;nextstate=S_1;endelse nextstate=S_8;default:nextstate=S_idle;endcaseendendmodule/ 数据路径模块module Datapath_Booth(product,m0,word1,word2,load_words,shift,add,sub,clock,reset);parameter L_word=4;output 2*L_word-1:0product;output m0;input L_word-1

35、:0word1,word2;input load_words,shift,add,sub,clock,reset;reg 2*L_word-1:0product,multiplicand;reg L_word-1:0mult;wire m0=mult0;parameter All_Ones=4'b1111;parameter All_Zeros=4'b0000;always(posedge clock or posedge reset)begin if(reset)begin mult<=0;multiplicand<=0;product<=0;end els

36、e if(load_words)begin if(word1L_word-1=0)multiplicand<=word1;else multiplicand<=All_Ones,word1L_word-1:0; mult<=word2;product=0;endelse if(shift)beginmult<=mult>>1;multiplicand<=multiplicand<<1;endelse if(add)begin product<=product+multiplicand;endelse if(sub)begin prod

37、uct<=product-multiplicand;endendendmodule三、CORDIC数字计算机module cordic(clk, phi, cos, sin); parameter W = 13, W_Z = 14; input clk; input W_Z-1:0 phi; outputW-1:0 cos, sin;reg W-1:0 cos, sin; reg W-1:0 x8:0, y8:0;reg W_Z-1:0 z7:0;/修正CORD I算法的比例因子,An的倒数always (posedge clk)begin x0 <= 13'h4D; y0

38、 <= 13'h00;z0 <= phi;/ 旋转 45度 if(z0W_Z-1) beginx1 <= x0 + y0;y1 <= y0 - x0;z1 <= z0 + 14'h65;endelse beginx1 <= x0 - y0;y1 <= y0 + x0;z1 <= z0 - 14'h65;end/ 旋转26.57 度 if(z1W_Z-1)beginx2 <= x1 + 1y1W-1, y1W-1:1; y2 <= y1 - 1x1W-1, x1W-1:1; z2 <= z1 + 14

39、9;h3B;endelse beginx2 <= x1 - 1y1W-1, y1W-1:1;y2 <= y1 + 1x1W-1, x1W-1:1; z2 <= z1 - 14'h3B;end/ 旋转14.04 度 if(z2W_Z-1)beginx3 <= x2 + 2y2W-1, y2W-1:2; y3 <= y2 - 2x2W-1, x2W-1:2; z3 <= z2 + 14'h1F;endelse beginx3 <= x2 - 2y2W-1, y2W-1:2; y3 <= y2 + 2x2W-1, x2W-1:2; z3

40、 <= z2 - 14'h1F;end/ 旋转7.13 度 if(z3W_Z-1)beginx4 <= x3 + 3y3W-1, y3W-1:3; y4 <= y3 - 3x3W-1, x3W-1:3; z4 <= z3 + 14'h10;endelse beginx4 <= x3 - 3y3W-1, y3W-1:3; y4 <= y3 + 3x3W-1, x3W-1:3; z4 <= z3 - 14'h10;end/ 旋转3.58 度 if(z4W_Z-1)beginx5 <= x4 + 4y4W-1, y4W-1:4;

41、y5 <= y4 - 4x4W-1, x4W-1:4;z5 <= z4 + 14'h8;endelse beginx5 <= x4 - 4y4W-1, y4W-1:4;y5 <= y4 + 4x4W-1, x4W-1:4;z5 <= z4 - 14'h8;end/ 旋转1.79 度if(z5W_Z-1)beginx6 <= x5 + 5y5W-1, y5W-1:5;y6 <= y5 - 5x5W-1, x5W-1:5;z6 <= z5 + 14'h4;endelse beginx6 <= x5 - 5y5W-1, y

42、5W-1:5;y6 <= y5 + 5x5W-1, x5W-1:5;z6 <= z5 - 14'h4;end/ 旋转0.90 度 if(z6W_Z-1)beginx7 <= x6 + 6y6W-1, y6W-1:6;y7 <= y6 - 6x6W-1,x6W-1:6;z7 <= z6 + 14'h2;endelse beginx7 <= x6 - 6y6W-1, y6W-1:6;y7 <= y6 + 6x6W-1, x6W-1:6;z7 <= z6 - 14'h2;end/ 旋转0.45 度 if(z7W_Z-1)begi

43、nx8 <= x7 + 7y7W-1, y7W-1:7;y8 <= y7 - 7x7W-1, x7W-1:7;endelse beginx8 <= x7 - 7y7W-1, y7W-1:7;y8 <= y7 + 7x7W-1, x7W-1:7; end cos <= x8;sin <= y8;endendmodule四、Johnson计数器Johnson计数器的行为类似链波计数器,但不同于链波计数器的异步特性。Johnson计数器为一种同步计数器,它的特性是每次只变化一个位,类似格雷码,且Johnson计数器有最精简的组合逻辑电路。综合以上两点,Johnso

44、n计数器是节省功率消耗的计数器,不过Joh nson计数器在高数值计数时会使用更多位而显得不经济,图为电路结构:代码:module joh nson(/in putclk,n rst,start, /outputcntr);in putclk,n rst,start;output 3:0cntr;reg 3:0 cntr;always(posedge clk or n egedge nrst) if(n rst) cntr <= 0;else if(start) begi ncntr3:1 <=cntr2:0; cntr0 <=cntr3;enden dmodule五、移位寄

45、存器1、串并转换模块WTERFACE.XRTLshift_clk2yrc*ct shiftjbil sfnft_clk 咖W_readyhuiM dau15 ; 0DkljieaiyDhusod daia卩 5:0shift_reg!5ier图434串册删懈融块就如卜滩;捕位使就号血fs为具叭 倆傀伽m§hiiidk时上升注敖剃积输入 的桝m牺到创的最高仏 棘器在每个齟时軸上升瀚i:计蟀共4仏op co呱由OOOOtlJ 1111=15氐bdjeady变为h这时悅丿!移入了 16位鳩 即16府的 辭威据busedjat己准务就妙移也新器継口说频表4.9所礼F加是线性榜位需存器的一护实

46、现巴&module shifLregister (bused data.虬ready, shiftbit. shift_cn. shilljlkjesei):output 卩:Q bused.dala; outpin bdjeady;input 曲ft_biL; input shiflen;i 叩 ut shift ,clk;input reset;騰出的准备扁柄 做入曲比特样创£钟純加法器的妁信号reg 7.0 busedjata;reg bd.ir&dy;reg 12:0 count;parameter TRUE=rbi, FALSE 二 TZ当移位使能为真时,在

47、每个移位时钟,移位比特移入移位寄存器always (posedge shift_clk)beginif <shift_en)beginbused _daia|6:0) <= bu$cd_daia|7J |; busedfcdata|7) <= shifibit;endendal ays (posedge shifi_dk>beginit I reset) begincount 0; /count 为 3 位.血 cwnl 由 000 计到 11L=7 后'bdjeMy 变为 1 end即输出数据已准备好else if() beginbdjeady, count

48、<= count + 1;ndmodule /of shift_regisier2生成伪随机数及伪随机序列应用设计LFSR A业踣览计】h <| II 7婕的应用.它"圧鼻J I的塞flbt诫数理 絵金甘梅|£的jjtit+lfSi iH l J Random Dumber gencmor 砸产生Ranttom MMM*.便件本身无法产生HllhFRt机的机做.<Plt LFSR却町以 IrtsAMnilftCi i MIKiitdIMnM机捽不是KilJIVUKMVIJk. tf&W E惟方行布惊2Mi. M如(加律、軸宅的忖W nJ i'

49、;X找刘它.A ft 1ftb ' Chei kxum的电Hi中町哦tt它.tiEtllftttt(CRC)它.LFSR拿索倍为计¥(N的内柞内遂自我测试也址利W LFSR.迪几个离存胸异倉门If 能产“出充韓的序列来 聿 M时冀总用敛M入仆幷h 足对F其应用举出咲制便山X 了斛別乜IL卜省“冀栩讦喊1 |的冲奇K h II电路栏构m图6>22片吓AB 6»22衣示出LFSR电踣庄8使时的聖构.LFSR电踣并非只-的聖恂.还育许&不闽冲类的交形.不闽的曼老户粧HI的序X并不一轩以W6-U 的LFSR而直.能产T (Hr-OZ何的庠列.序列屮而的元*并不

50、LFSR的 T® 定义的K Xor Gate 几卜D Hip Hop的连托 以图6J8为优Xor Gale打 D-HipRop的逢樓是7、3, 2l因此.LFSR的Tps试总(7 3 2丨|而右卜谢的 Nor Gate W$t9产生 0根朝显.LFSR|7X)«« biOOO.OOOO时.这个 Nor Gate 聲迫LFSR回M 0.我门必的lt畀*所”的叶那絶产牛出的LFSR电路.tMM*的 咖梅小会*整地产生0-(r-l)ZM的所Wtt?常用的LFSRT4如丧6J所、ft"TorSIi(ms?9HJ212097151»ln4IMM321J0

51、23&MM0?214)4I67T72IS23JX0251MS443IX32667KMM23JJJ0rIWI7WX.4.U0312M43M»9274HSM709II21协107574182J29JJX)312I474S3M7MU324»W6?»5'defi ne bw 8'defi ne tap8 8'b1000_1110module lfsr(/inputclk,nrst,oen,/outputdout);input clk,nrst;input oen;output 'bw-1:0 dout;parameter '

52、bw-1:0 taps='tap8;integer i;reg 7:0 pre_lfst;reg 7:0 lfst_reg;wire bO=lfsr_reg'bw-1F|lfsr_reg'bw-2:0;always (posedge clk or negedge nrst)if(nrst) lfsr_reg <= 0;else if (oen)beginbeginfor (i=0;i<=('bw-2);i=i+1)begin if(tapsi)pre_lfsri+1=lfsr_regiAb0; else pre_lfsri+1=lfsr_regi;e

53、ndpre_lfsr0=b0;endlfsr_reg <= pre_lfsr;endwire 7:0 dout=lfst_reg;endmodule3 桶形移位寄存器(循环移位寄存器)桶形移位寄存器所占的面积较大, 但是如果某个应用需要大量的多位比特移位, 则采用 桶形移位寄存器还是有必要的,即循环移位寄存器。如果 load 有效,则输入 data_in 输出到 data_out ,不执行任何操作;如果右移位控制信 号 rshift_ctrl 有效,则输出数据 data_out 右移位; 如果左移位控制信号 lshift_ctrl 有效, 则输 出数据 data_out 左移位;移位的个数由 shiftnum 来决定;整个设计为同步设计,一切操作 均在时钟 clk 的上升

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论