第4章HDL逻辑设计_第1页
第4章HDL逻辑设计_第2页
第4章HDL逻辑设计_第3页
第4章HDL逻辑设计_第4页
第4章HDL逻辑设计_第5页
已阅读5页,还剩132页未读 继续免费阅读

下载本文档

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

文档简介

第4章HDL逻辑设计14.1基本组合电路设计组合电路的输出可以表达为瞬间输入信号的布尔函数形式,组合电路不包含反馈结构。通常,布尔函数可表示为“积之和”或“和之积”的形式,可以两级与-或逻辑电路实现。逻辑电路的优化:卡诺图、代数化简法、EDA工具自动优化。组合逻辑建模方法:结构化建模:实例化基本逻辑门。数据流建模:assign连续赋值语句。行为建模:电平敏感控制的always结构。2多路选择器功能:根据选择信号从多个输入信号中选择一个送到输出端。例1:4选1多路选择器外框图:abcdselout图1:4选1多路选择器外框图3例1:4选1多路选择器的数据流模型:modulemux4_1(out,a,b,c,d,sel);output[7:0]out;input[7:0]a,b,c,d;input[1:0]sel;assignout=(sel==0)?a:(sel==1)?b:(sel==2)?c:(sel==3)?d:8’bx;endmodule4例1:4选1多路选择器的行为模型:modulemux4_1(out,a,b,c,d,sel);output[7:0]out;input[7:0]a,b,c,d;input[1:0]sel;reg[7:0]out;always@(aorborcordorsel)

case(sel)0:out=a;1:out=b;2:out=c;3:out=d;

defult:out=8’bx;endcaseendmodule5例1:带三态输出控制的4选1多路选择器的行为模型:modulemux4_1(out,a,b,c,d,sel,enable);output[7:0]out;input[7:0]a,b,c,d;input[1:0]sel;inputenable;reg[7:0]temp;assignout=enable?temp:8’bz;always@(aorborcordorsel)

case(sel)0:temp=a;1:temp=b;2:temp=c;3:temp=d;

defult:out=8’bx;endcaseendmodule62、译码器功能:译码器有n个输入变量,2n个(或少于2n个)输出,每个输出对应于n个输入变量的一个最小项。当输入为某一组合时,对应的仅有一个输出为“0”(或为“1”),其余输出均为“1”(或为“0”)。译码器的用途是把输入代码译成相应的控制电位,以实现代码所要求的操作。图2给出了二输入四输出译码器的逻辑图。译码器中常设置“使能”控制端,当该端为“1”时,译码器功能被禁止,此时所有输出均为“1”。使能端的一个主要功能是用来扩充输入变量数。图3是用两片三输入八输出译码器扩展成一个四输入十六输出译码器的实例。7图2二输入四输出译码器8图3两块三输入变量译码器扩展成四输入译码器

9例2:3-8译码器的行为模型:moduledecoder3_8(data,code);output[7:0]data;input[2:0]code;always@(code)

case(code)0:data=8’b0000_0001;1:data=8’b0000_0010;2:data=8’b0000_0100;3:data=8’b0000_1000;4:data=8’b0001_0000;5:data=8’b0010_0000;6:data=8’b0100_0000;7:data=8’b1000_0000;

defult:data=8’bx;endcaseendmodule103、加法器一位全加器:真值表:abciscoabcicos00000001010100101110100011011011010111111位全加器逻辑表达式:S=abci+abci+abci+abci=abciCo=abci+abci+abci+abci=ab+aci+bci11由多个一位全加器把进位信号串联而成,每个全加器都有2级门的延迟时间,故这种n位加法器有2n级门的延迟时间。多位加法器电路设计abscicoabscicoabscicoFAabscicocicoa<3:0>b<3:0>a<0>a<1>a<3>a<2>b<0>b<1>b<3>b<2>s<0>s<1>s<3>s<2>s<3:0>FAFAFA12串行加法器完成一次加法所需时间较长。这是因为其位间进位是串行传送的,本位全加和Fi必须等低位进位Ci-1来到后才能进行,加法时间与位数有关。只有改变进位逐位传送的路径,才能提高加法器工作速度。解决办法之一是采用“超前进位产生电路”来同时形成各位进位,从而实现快速加法。我们称这种加法器为超前进位加法器。超前进位产生电路是根据各位进位的形成条件来实现的。只要满足下述两条件中任一个,就可形成Ci:

(1)Xi,Yi均为“1”;

(2)Xi,Yi任一个为“1”,且进位Ci-1为“1”。由此,可写得Ci的表达式为

Ci=XiYi+(Xi+Yi)Ci-1 (2.16)超前进位加法器13引入进位传递函数Pi和进位产生函数Gi的概念,定义为:

Pi=Xi+Yi

Gi=Xi·YiPi的意义是:当Xi,Yi中有一个为“1”时,若有进位输入,则本位向高位传送进位,这个进位可看成是低位进位越过本位直接向高位传递的。Gi的意义是:当Xi,Yi均为“1”时,不管有无进位输入,定会产生向高位的进位。将Pi、Gi代入(2.16)式,便可得:

Ci=Gi+PiCi-1 (2.17)14反复应用上式,便可得:

C1=G1+P1C0 (2.22) C2=G2+P2G1+P2P1C0 (2.23) C3=G3+P3G2+P3P2G1+P3P2P1C0 (2.24) C4=G4+P4G3+P4P3G2+P4P3P2G1+P4P3P2P1C0 (2.25)经过恒等变换可得:

C1=P1+G1C0 (2.26) C2=P2+G2P1+G2G1C0 (2.27) C3=P3+G3P2+G3G2P1+G3G2G1C0 (2.28) C4=P4+G4P3+G4G3P2+G4G3G2P1+G4G3G2G1C0 (2.29)15四位超前进位加法器逻辑图16超前进位的4位加法器门级模型:moduleadder_4(sum,c_out,a,b,c_in);output[3:0]sum;outputc_out;input[3:0]a,b;inputc_in;

wirep0,g0,p1,g1,p2,g2,p3,g3;wirec1,c2,c3,c4;assignp0=a[0]|b[0];assignp1=a[1]|b[1];assignp2=a[2]|b[2];assignp3=a[3]|b[3];assigng0=a[0]&b[0];assigng1=a[1]&b[1];assigng2=a[2]&b[2];assigng3=a[3]&b[3];17assignc1=g0|(p0&c_in);assignc2=g1|(p1&g0)|(p1&p0&c_in);assignc3=g2|(p2&g1)|(p2&p1&g0)|(p2&p1&p0&c_in);assignc4=g3|(p3&g2)|(p3&p2&g1)|(p3&p2&p1&g0)|(p3&p2&p1&p0&c_in);assignsum[0]=a[0]^b[0]^c_in;assignsum[1]=a[1]^b[1]^c1;assignsum[2]=a[2]^b[2]^c2;assignsum[3]=a[3]^b[3]^c3;assignc_out=c4;endmodule184.2基本时序电路设计时序电路的输出不仅与当前的输入有关,而且与电路内部状态有关。在时序电路中,大部分应用系统是同步的,即电路工作时由一个公共的时钟信号有节奏的推进,每当时钟信号到来时(上升沿或下降沿),电路状态发生一次更新。同步系统在两次时钟脉冲之间保持状态的稳定,使得系统更具稳定性,便于设计、调试,所以占据系统的大部分。与同步系统相对应的是异步系统,在任何时刻多个信号到来时,状态都有可能发生变化。常见的时序电路:锁存器、触发器、移位器、计数器等。19锁存器功能:当使能信号有效时,锁存器输出完全跟随输入的变化;无效时,输出信号保持刚才的状态。锁存器数据流模型:modulelatch(out,in,enable);outputout;inputin,enable;assignout=enable?in:out;endmodule20锁存器行为模型:modulelatch(out,in,enable);outputout;inputin,enable;regout;

always@(inorenable)

if(enable)out=in;endmodule21带异步置位与复位逻辑的锁存器modulelatch(q,enable,set,clr,d);inputenable,d,set,clr;outputq;regq;always@(enableorsetorclrord)beginif(set)q<=1;elseif(clr)q<=0;elseif(enable)q<=d;endendmodule222、D触发器D触发器是由信号边沿触发的器件,是最基本的同步时序电路。功能:当规定的时钟沿到达时,D触发器的输出等于输入;否则,输出信号保持原来状态不变。上升沿D触发器模型:moduledff(q,data,clk);outputq;inputdata,clk;regq;always@(posedgeclk);q<=data;endmodule23带异步复位的触发器moduleasyn_ff(d,clk,rstout);inputd,clk,rst;outputq;regq;always@(posedgeclkornegedgerst)beginif(rst==0)q<=0;elseq<=d;endendmodule24带同步复位的触发器modulesync_set(d,clk,rst,out);inputd,clk,st;outputq;regq;always@(posedgeclk)beginif(rst==0)q<=0;elseq<=d;endendmodule252、计数器功能:用于对脉冲信号计数,定时、分频等。带计数使能端和异步复位端的8位计数器行为模型:modulecounter(out,clk,en,rst_n);parameterSIZE=8;output[SIZE-1:0]out;inputclk,en,rst_n;reg[SIZE_1:0]out;always@(posedgeclkornegedge

rst_n);

if(~rst_n)out<=8’b0;elseif(en)out<=out+1;endmodule264.3同步状态机设计同步状态机的电路结构:状态寄存器、下一状态产生逻辑、输出信号产生逻辑。下图给出了一个同步状态机的电路结构图:多周期处理机的控制部件的电路结构图。状态机类型:Mealy型、Moore型。状态机设计方法:状态划分与定义。画出状态转移图。建立下一状态及输出信号真值表。建立VerilogRTL模型。状态机设计举例:多周期处理机的控制部件设计。27多周期处理机控制部件的电路结构下一状态产生模块控制信号产生模块状态寄存器CLKZEROOPCODEQ3Q2Q1Q0D3D2D1D0Q0Q1Q2Q3OPCODED0D1D2D3Q0Q1Q2Q3OPCODEZEROWRITEPCSELLDSTWRITEMEMWRITEIRSELLOADSELSTWRITEREGSELALUASELALUBALUOPWRITEZERO28有限状态机的描述•有限状态机是通过现态、次态、输入和输出之间的相互作用构成的。•有限状态机可以分成两类:–Mealy型:输出与现态和输入相关。–Moore型:输出只与现态相关,和输入无关。•有限状态机需要有复位处理。•有限状态机的状态转换应当在同一个时钟信号的同一个边沿发生。•有限状态机可以有两种描述方式:–隐式描述:多数逻辑综合器不支持。–显式描述:明确说明状态寄存器和状态赋值。29有限状态机的显式描述•结构化程度更好。•可以比较容易地控制缺省状态。•可以处理复杂的状态转换。•所有综合器都支持。•可以有如下几种方式:–一个procedure:在一个procedure中处理所有的状态转换、次态产生和输出逻辑。–两个procedure:将处理状态转换的时序逻辑和处理次态与输出的组合逻辑分开。–三个procedure:一个处理状态转换的时序逻辑,一个处理次态的组合逻辑,一个处理输出的组合逻辑。•通常的描述方式如下:–指定保存状态的寄存器。–在一个过程块中使用case语句描述各个状态的次态和输出。–case分支内部的条件分支使用if描述。30显式FSM举例-MooreStyle`timescale1ns/100psmodulestate4(clock,reset,out);inputreset,clock;output[1:0]out;reg[1:0]out;parameter[1:0]stateA=2'b00,stateB=2'b01,stateC=2'b10,stateD=2'b11;reg[1:0]state;reg[1:0]nextstate;always@(posedgeclock)beginif(reset)state<=stateA;elsestate<=nextstate;end31显式FSM举例-MooreStyle(续)always@(state)begin:machinecase(state)stateA:beginnextstate=stateB;out=2'b00;endstateB:beginnextstate=stateC;out=2'b01;endstateC:beginnextstate=stateD;out=2'b10;endstateD:beginnextstate=stateA;out=2'b11;endendcaseendendmodule32显式FSM举例-MealyStyle`timescale1ns/100psmodulestate4(clock,reset,out,condition1,condition2);inputreset,clock,condition1,condition2;output[1:0]out;reg[1:0]out;parameter[1:0]stateA=2'b00,stateB=2'b01,stateC=2'b10,stateD=2'b11;reg[1:0]state;reg[1:0]nextstate;always@(posedgeclock)beginif(reset)state<=stateA;elsestate<=nextstate;end33显式FSM举例-MealyStyle(续)

always@(stateorcondition1orconditiona2)begin:machinecase(state)stateA:beginif(condition1==1)beginnextstate=stateB;out=2'b00;endelsebeginnextstate=stateA;out=2'b01;endendstateB:beginif(conditiona2==1)beginnextstate=stateC;out=2'b01;endelsebeginnextstate=stateB;out=2'b00;endenddefault:beginnextstate=stateA;out=2’b00;endendcaseendendmodule343个过程块的FSM举例//现态:always@(posedgeclock)beginif(reset)beginstate<=stateA;endelsestate<=nextstate;end353个过程块的FSM举例(续1)//次态always@(stateorcondition1orcondition2)begin:machinecase(state)stateA:beginif(condition1==1)nextstate=stateB;elsenextstate=stateA;endstateB:beginif(conditiona2==1)nextstate=stateC;elsenextstate=stateB;enddefault:beginnextstate=stateA;endendcaseend363个过程块的FSM举例(续2)//输出always@(stateorcondition1orcondition2)begin:otptcase(state)stateA:beginif(condition1==1)out=2'b00;elseout=2'b01;endstateB:beginif(condition2==1)out=2'b01;elseout=2'b00;enddefault:beginout=2’b00;endendcaseend37状态机设计举例1:多周期处理机的控制部件设计多周期处理机执行一条指令要用多个时钟周期,依据指令类型的不同,所用的时钟周期的数量也不相同。假设处理机的指令系统如下:31262521201615540指令000000rdrs1rs2andrd,rs1,rs2000001rdrs1immeandird,rs1,imme000010rdrs1rs2orrd,rs1,rs2000011rdrs1immeorird,rs1,imme000100rdrs1rs2addrd,rs1,rs2000101rdrs1immeaddird,rs1,imme000110rdrs1rs2subrd,rs1,rs2000111rdrs1immesubird,rs1,imme001000rdrs1immeloadrd,rs1,imme001001rdrs1immestorerd,rs1,imme001010dispbnedisp001011dispbeqdisp001100dispbranchdisp38多周期处理机的数据路径PC寄存器堆ALUABZERO存储器addressdataoutdatainCSOEWEWRITEMEMALUOPZEROZEROWRITEZEROMUXMUXMUX1偏移量符号扩展立即数符号扩展WRITEREGDIADA1A2Q2Q1SELLOADSELST偏移量立即数rdrs1rs2rdWRITEPCMUXIRMUXSELLDSTSELALUASELALUBABIMWRITEIR39多周期处理机的控制信号控制信号定义:参见上图,数据路径所需要的控制信号如下:WRITEPC:PC写使能信号,为1时,CLK上升沿把PC输入端的数据写入PC;SELLDST:存储器地址输入选择,为1时,选ALU计算出的地址,为0选PC;WRITEMEM:写存储器使能信号,由store指令产生;WRITEIR:IR写使能信号,为1时,CLK上升沿把由PC访问到的指令写入IR;SELLOAD:寄存器堆数据输入选择,为1时选存储器输出,为0选ALU输出;SELST:执行store指令时,从寄存器堆Q2端口读出寄存器rd的内容;WRITEREG:写寄存器堆使能信号;SELALUA:ALUA输入端选择,0选寄存器RS1,1选PC;SELALUB:ALUB输入端选择,00选寄存器RS2,01选立即数IM,10选1,11选偏移量;ALUOP:ALU操作控制码;WRITEZERO:写标志寄存器ZERO的使能信号;40多周期处理机执行指令的5个周期把指令的操作分成若干个周期,并力图使每个周期完成的操作基本上达到平衡;时钟周期的时间长度最好以某种器件的延迟时间为基准,如ALU、寄存器堆、存储器等,且以较长延迟时间为基准。通常把指令的执行分为以下5个步骤,每个步骤用一个时钟周期。取指令及PC+1周期指令译码、读寄存器及转移周期ALU执行或者存储器地址计算周期ALU指令结束周期或者存储器访问周期写回周期41多周期处理机的总体电路图PC寄存器堆ALUABZERO存储器addressdataoutdatainCSOEWEWRITEMEMALUOPZEROZEROWRITEZEROMUXMUXMUX1偏移量符号扩展立即数符号扩展WRITEREGDIADA1A2Q2Q1SELLOADSELST偏移量立即数rdrs1rs2rdWRITEPCMUXIRMUXSELLDSTSELALUASELALUBABIMWRITEIRZEROOPCODE控制部件控制信号42多周期处理机的状态划分、定义及其转移图状态:完成某些特定功能的一个时钟周期,例如我们把取指令周期定义为一个状态,把指令译码周期定义为下一个状态。状态之间的转化发生在时钟上升沿。对于同一个问题,状态的定义和划分可以是不同的。下面给出一种多处理机的状态划分方案。见下图:IF(S0)ID(S1)ALURR(S2)LDWB(S10)ALURI(S3)LOAD(S4)STORE(S5)LDMEM(S8)STMEM(S9)ALURWB(S6)ALUIWB(S7)ALUR-RALUR-IloadstorebranchIFIDEXEMEMWB43多周期处理机的状态转移表当前状态Q3Q2Q1Q0当前输入下个状态D3D2D1D00000(S0)X0001(S1)0001(S1)BR0000(S0)0001(S1)RR0010(S2)0001(S1)RI0011(S3)0001(S1)load0100(S4)0001(S1)store0101(S5)0010(S2)X0110(S6)0011(S3)X0111(S7)0100(S4)X1000(S8)0101(S5)X1001(S9)0110(S6)X0000(S0)0111(S7)X0000(S0)1000(S8)X1010(S10)1001(S9)X0000(S0)1010(S10)X0000(S0)其中:RR=and+or+add+sub(寄存器-寄存器操作);RI=andi+ori+addi+subi(寄存器-立即数操作);BR=branch+bne+beq(转移指令);X=任意。44多周期处理机的下一状态表达式D0=S0+S1*RI+S1*store+S3+S5;D1=S1*RR+S1*RI+S2+S3+S8;D2=S1*load+S1*store+S2+S3;D3=S4+S5+S8;将上述表达式化简,画出逻辑图,即可得到多周期处理机的状态转移电路。45多周期处理机的控制信号表S0S1S2S3S4S5S6S7S8S9S10WRITEPC1BT000000000SELLDST0XXX1*1*XX111WRITEMEM00000000010WRITEIR10000000000SELLOADXXXX1*X001*X1SELSTX00XX

10XX1XWRITEREG00000011001SELALUA11000000000SELALUB111000000000SELALUB001011101111WRITEZERO00000011000ALUOP111OP1OP111OP1OP1111ALUOP000OP0OP000OP0OP0000BT=branch+bne*ZERO+beq*ZERO(转移发生)OP0=or+ori+sub+subiOP1=add+addi+sub+subi46多周期处理机控制信号的表达式WRITEPC=S0+S1*BT

SELLDST=S4+S5+S8+S9+S10WRITEMEM=S9WRITEIR=S0SELLOAD=S4+S8+S10SELST=S5+S9WRITEREG=S6+S7+S10SELALUA=S0+S1SELALUB1=S0+S1SELALUB0=S1+S3+S4+S5+S7+S8+S9+S10WRITEZERO=S6+S7ALUOP1=S0+S1+S2*OP1+S3*OP1+S4+S5+S6*OP1+S7*OP1+S8+S9+S10ALUOP0=S2*OP0+S3*OP0+S6*OP0+S7*OP047modulecontrol(clk,start,zero,opcode,writepc,selldst,writemem,writeir,selload,selst,writereg,selalua,selalub,aluop,writezero);inputclk,start,zero;input[5:0]opcode;outputwritepc,selldst,writemem,writeir,selload,selst,writereg,selalua,writezero;output[1:0]selalub,aluop;reg[3:0]q;wire[3:0]d;wirezero;多周期处理机控制部件的RTL模型48always@(posedgeclk) begin if(start) q<=4'd0; else q<=d; endassignd[0]=(~q[3]&~q[2]&~q[1]&~q[0])|((~q[3]&~q[2]&~q[1]&q[0])&(~opcode[3]&opcode[0]))|((~q[3]&~q[2]&~q[1]&q[0])&(opcode[3]&~opcode[2]&~opcode[1]&opcode[0]))|(~q[3]&~q[2]&q[1]&q[0])|(~q[3]&q[2]&~q[1]&q[0]);

49assignd[1]=((~q[3]&~q[2]&~q[1]&q[0])&(~opcode[3]&~opcode[0]))|((~q[3]&~q[2]&~q[1]&q[0])&(~opcode[3]&opcode[0]))|(~q[3]&~q[2]&q[1]&~q[0])|(~q[3]&~q[2]&q[1]&q[0])|(q[3]&~q[2]&~q[1]&~q[0]);

assignd[2]=((~q[3]&~q[2]&~q[1]&q[0])&(opcode[3]&~opcode[2]&~opcode[1]&~opcode[0]))|((~q[3]&~q[2]&~q[1]&q[0])&(opcode[3]&~opcode[2]&~opcode[1]&opcode[0]))|(~q[3]&~q[2]&q[1]&~q[0])|(~q[3]&~q[2]&q[1]&q[0]);assignd[3]=(~q[3]&q[2]&~q[1]&~q[0])|(~q[3]&q[2]&~q[1]&q[0])|(q[3]&~q[2]&~q[1]&~q[0]);

50assignwritepc=(~q[3]&~q[2]&~q[1]&~q[0])|((~q[3]&~q[2]&~q[1]&q[0])&((opcode[3]&opcode[2]&~opcode[1]&~opcode[0])|(opcode[3]&~opcode[2]&opcode[1]&~opcode[0]&~zero)|(opcode[3]&~opcode[2]&opcode[1]&opcode[0]&zero)));assignselldst=(~q[3]&q[2]&~q[1]&~q[0])|(~q[3]&q[2]&~q[1]&q[0])|(q[3]&~q[2]&~q[1]&~q[0])|(q[3]&~q[2]&~q[1]&q[0])|(q[3]&~q[2]&q[1]&~q[0]);assignwritemem=q[3]&~q[2]&~q[1]&q[0];assignwriteir=~q[3]&~q[2]&~q[1]&~q[0];assignselload=(~q[3]&q[2]&~q[1]&~q[0])|(q[3]&~q[2]&~q[1]&~q[0])|(q[3]&~q[2]&q[1]&~q[0]);assignselst=(~q[3]&q[2]&~q[1]&q[0])|(q[3]&~q[2]&~q[1]&q[0]);

51assignwritereg=(~q[3]&q[2]&q[1]&~q[0])|(~q[3]&q[2]&q[1]&q[0])|(q[3]&~q[2]&q[1]&~q[0]);assignselalua=(~q[3]&~q[2]&~q[1]&~q[0])|(~q[3]&~q[2]&~q[1]&q[0]);assignselalub[1]=(~q[3]&~q[2]&~q[1]&~q[0])|(~q[3]&~q[2]&~q[1]&q[0]);assignselalub[0]=(~q[3]&~q[2]&~q[1]&q[0])|(~q[3]&~q[2]&q[1]&q[0])|(~q[3]&q[2]&~q[1]&~q[0])|(~q[3]&q[2]&~q[1]&q[0])|(~q[3]&q[2]&q[1]&q[0])|(q[3]&~q[2]&~q[1]&~q[0])|(q[3]&~q[2]&~q[1]&q[0])|(q[3]&~q[2]&q[1]&~q[0]);assignwritezero=(~q[3]&q[2]&q[1]&~q[0])|(~q[3]&q[2]&q[1]&q[0]);52assignaluop[1]=(~q[3]&~q[2]&~q[1]&~q[0])|(~q[3]&~q[2]&~q[1]&q[0])|((~q[3]&~q[2]&q[1]&~q[0])&(~opcode[3]&opcode[2]))|((~q[3]&~q[2]&q[1]&q[0])&(~opcode[3]&opcode[2]))|(~q[3]&q[2]&~q[1]&~q[0])|(~q[3]&q[2]&~q[1]&q[0])|((~q[3]&q[2]&q[1]&~q[0])&(~opcode[3]&opcode[2]))|((~q[3]&q[2]&q[1]&q[0])&(~opcode[3]&opcode[2]))|(q[3]&~q[2]&~q[1]&~q[0])|(q[3]&~q[2]&~q[1]&q[0])|(q[3]&~q[2]&q[1]&~q[0]);assignaluop[0]=((~q[3]&~q[2]&q[1]&~q[0])&(~opcode[3]&opcode[2]))|((~q[3]&~q[2]&q[1]&q[0])&(~opcode[3]&opcode[2]))|((~q[3]&q[2]&q[1]&~q[0])&(~opcode[3]&opcode[2]))|((~q[3]&q[2]&q[1]&q[0])&(~opcode[3]&opcode[2]));endmodule5354状态机设计举例2:可移动高性能电脑加密机

系统总体结构可移动高性能电脑加密机的硬件主要由加密芯片、USB接口芯片以及晶体振荡器等元器件构成,其中加密芯片又包括AES加密/解密模块、RSA加密/解密模块和控制模块。可移动高性能电脑加密机的软件主要包括加密机控制软件和USB驱动软件等。其样机照片和系统结构图见下页。系统功能描述可移动高性能电脑加密机可用于进行信息加密/解密和数字签名。具体工作流程是:将可移动高性能电脑加密机插入电脑的USB接口,在加密机控制软件的控制下,将存储在PC机上的各种信息文件传输至电脑加密机进行加解密处理或数字签名,并将加解密或数字签名后的结果文件传输回PC机保存。55565758AES模块系统结构图59USBSLAVEFIFO与AES模块的接口(控制)模块60表1USB与AES接口模块外部信号说明信号名称传输方向信号含义clk输入时钟信号rst输入复位信号,1有效。load输出数据装载使能信号,用于控制输入明/密文、密钥、S盒配置数据等,1有效。address<7:0>输出寄存器或RAM地址,用于表示明文/密文/密钥寄存器、S盒RAM单元。keyexpen输出密钥扩展使能信号,1有效。keyexprdy输入密钥扩展完成标识信号,1有效。staenc输出开始加密使能信号,1有效。stadec输出开始解密使能信号,1有效。encdecrdy输入加/解密运算完成标识信号,1有效。din<15:0>输出接AES输入数据总线,用于输入明/密文、密钥、配置数据等。61表1USB与AES接口模块外部信号说明(续)信号名称传输方向信号含义dout<15:0>输入AES输出数据总线,用于输出加/解密结果到接口模块。shift输出结果移位输出使能信号,1有效。有效时,每个时钟周期移位输出16位结果。SLOE输出USBFIFO输出使能信号,0有效。SLRD输出读USBFIFO输出使能信号,0有效。SLWR输出写USBFIFO输出使能信号,0有效。FIFOADR<1:0>输出USBFIFO地址。FULL输入USBFIFO满标志信号,0有效。EMPTY输入USBFIFO空标志信号,0有效。FD<15:0>输入/输出USBFIFO读写数据总线。62状态划分及定义S0:初始状态。从USBSLAVEFIFO中读出一个控制字,根据控制字内容转到相应状态。需要控制的信号:SLOE、SLRD、FIFOADR<1:0>。复位后处于初始状态。S1:密钥装载状态。需要控制的信号:load、address、din、SLOE、SLRD、FIFOADR<1:0>。S2:密钥扩展状态。需要控制的信号:keyexpen。S3:加密S盒配置状态。需要控制的信号:load、address、din、SLOE、SLRD、FIFOADR<1:0>。S4:明文装载状态。需要控制的信号:load、address、din、SLOE、SLRD、FIFOADR<1:0>。S5:加密状态。需要控制的信号:staenc。63状态划分及定义(续)S6:加密结果输出状态。需要控制的信号:shift、FD<15:0>、SLWR、FIFOADR<1:0>。S7:解密S盒配置状态。需要控制的信号:load、address、din、SLOE、SLRD、FIFOADR<1:0>。S8:密文装载状态。需要控制的信号:load、address、din、SLOE、SLRD、FIFOADR<1:0>。S9:解密状态:需要控制的信号:stadec。S10:解密结果输出状态。需要控制的信号:shift、FD<15:0>、SLWR、FIFOADR<1:0>。64状态转移图65状态转移及控制信号取值表当前状态当前输入下一状态当前输出S0CONWD≠下述5个值,EMPTYS0SLOE、SLRD、FIFOADR<1:0>S0CONWD=8000HS1SLOE、SLRD、FIFOADR<1:0>S0CONWD=4000HS3SLOE、SLRD、FIFOADR<1:0>S0CONWD=2000HS4SLOE、SLRD、FIFOADR<1:0>S0CONWD=1000HS7SLOE、SLRD、FIFOADR<1:0>S0CONWD=0800HS8SLOE、SLRD、FIFOADR<1:0>S1密钥装载结束S2load、address、din、SLOE、SLRD、FIFOADR<1:0>S1密钥装载没结束S1load、address、din、SLOE、SLRD、FIFOADR<1:0>66状态转移及控制信号取值表(续1)当前状态当前输入下一状态当前输出S2密钥扩展结束S0keyexpenS2密钥扩展没结束S2keyexpenS3加密S盒配置结束S0load、address、din、SLOE、SLRD、FIFOADR<1:0>S3加密S盒配置没结束S3load、address、din、SLOE、SLRD、FIFOADR<1:0>S4明文装载结束S5load、address、din、SLOE、SLRD、FIFOADR<1:0>S4明文装载没结束S4load、address、din、SLOE、SLRD、FIFOADR<1:0>S5加密结束S6staencS5加密没结束S5staenc67S6加密结果输出结束S0shift、FD<15:0>、SLWR、FIFOADR<1:0>S6加密结果输出没结束S6shift、FD<15:0>、SLWR、FIFOADR<1:0>S7解密S盒配置结束S0load、address、din、SLOE、SLRD、FIFOADR<1:0>S7解密S盒配置没结束S7load、address、din、SLOE、SLRD、FIFOADR<1:0>S8密文装载结束S9load、address、din、SLOE、SLRD、FIFOADR<1:0>S8密文装载没结束S8load、address、din、SLOE、SLRD、FIFOADR<1:0>S9解密结束S10stadecS9解密没结束S9stadecS10解密结果输出结束S0shift、FD<15:0>、SLWR、FIFOADR<1:0>S10解密结果输出没结束S10shift、FD<15:0>、SLWR、FIFOADR<1:0>状态转移及控制信号取值表(续2)68moduleusb_aes_intf(clk,rst,full,empty,fd,keyexprdy,encdecrdy,dout,load,address,keyexpen,staenc,stadec,din,shift, sloe,slrd,slwr,fifoadr);

inputclk,rst,full,empty,keyexprdy,encdecrdy; inout[15:0]fd; input[15:0]dout;

outputload,keyexpen,staenc,stadec,shift,sloe,slrd,slwr; output[7:0]address; output[15:0]din; output[1:0]fifoadr;

RTL代码69

reg[10:0]cur_state,nxt_state,state_delay; reg[4:0]con_word;//con_word=5'b10000,gotoKEY_LOADstate,//con_word=5'b01000,gotoENC_SBOX_CFGstate, //con_word=5'b00100,gotoPTEXT_LOADstate,//con_word=5'b00010,gotoDEC_SBOX_CFGstate, //con_word=5'b00001,gotoCTEXT_LOADstate.

reg[15:0]usb_in_data,aes_in_data; wireaes_in_reg_en,data_to_usb_en,key_load_end,key_expand_end,enc_sbox_cfg_end,ptext_load_end; wireencrypt_end,enc_result_out_end,dec_sbox_cfg_end; wirectext_load_end,decrypt_end,dec_result_out_end; regslrd,load,slwr; reg[6:0]wordcount; wirecon_reg_en,writefifo,sloe; wire[1:0]fifoadr; reg[7:0]address1,address;

70parameterINITIAL=11'b100_0000_0000, KEY_LOAD=11'b000_0000_0001, KEY_EXPAND=11'b000_0000_0010, ENC_SBOX_CFG=11'b000_0000_0100, PTEXT_LOAD=11'b000_0000_1000, ENCRYPT=11'b000_0001_0000, ENC_RESULT_OUT=11'b000_0010_0000, DEC_SBOX_CFG=11'b000_0100_0000, CTEXT_LOAD=11'b000_1000_0000, DECRYPT=11'b001_0000_0000, DEC_RESULT_OUT=11'b010_0000_0000;

71//controlwordregister always@(posedgeclk) if(rst) con_word<=5'd0; else if(con_reg_en) con_word<=fd[4:0]; else if(con_word!=5'd0) con_word<=5'd0; else con_word<=con_word; 72//usbindataregister always@(posedgeclk)if(rst)usb_in_data<=16'd0;elseif(slrd==0) usb_in_data<=fd;elseusb_in_data<=usb_in_data;

73//aesindataregisteralways@(posedgeclk)if(rst)aes_in_data<=16'd0;elseif(aes_in_reg_en) aes_in_data<=dout;else aes_in_data<=aes_in_data;assignaes_in_reg_en=encdecrdy|shift;

//fdisbidirectiondatabusassignfd=data_to_usb_en?aes_in_data:16'bzzzz_zzzz_zzzz_zzzz;assigndata_to_usb_en=(cur_state==ENC_RESULT_OUT)|(cur_state==DEC_RESULT_OUT);

74//mainFSMalways@(posedgeclk)if(rst)cur_state<=INITIAL;elsecur_state<=nxt_state;

always@(cur_stateorcon_wordorkey_load_endorkey_expand_endorenc_sbox_cfg_endorptext_load_endorencrypt_endorenc_result_out_endordec_sbox_cfg_endorctext_load_endordecrypt_endordec_result_out_end)case(cur_state)INITIAL:case(con_word)5'b10000:nxt_state=KEY_LOAD;5'b01000:nxt_state=ENC_SBOX_CFG;5'b00100:nxt_state=PTEXT_LOAD;5'b00010:nxt_state=DEC_SBOX_CFG;5'b00001:nxt_state=CTEXT_LOAD;default:nxt_state=INITIAL;endcase

75KEY_LOAD: if(key_load_end) nxt_state=KEY_EXPAND; else nxt_state=KEY_LOAD; KEY_EXPAND: if(key_expand_end) nxt_state=INITIAL; else nxt_state=KEY_EXPAND; ENC_SBOX_CFG: if(enc_sbox_cfg_end) nxt_state=INITIAL; else nxt_state=ENC_SBOX_CFG; PTEXT_LOAD: if(ptext_load_end) nxt_st

温馨提示

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

评论

0/150

提交评论