组合逻辑电路的组合逻辑电路的VerilogVerilog设计设计复习复习组合逻辑电路的概念组合逻辑电路的概念组合逻辑电路的特点组合逻辑电路的特点组合逻辑的描述方法组合逻辑的描述方法常用的组合逻辑电路常用的组合逻辑电路描述设计的三种基本方式描述设计的三种基本方式数据流方式数据流方式assignassign语语句句结构方式结构方式模块、原模块、原语实例化语实例化行为方式行为方式alwaysalways、、initialinitial语句语句VerilogVerilog描述组合逻辑电路描述组合逻辑电路assignassign语句(被赋值类型?)语句(被赋值类型?)alwaysalways语句(敏感事件?赋值类型?)语句(敏感事件?赋值类型?)门原语门原语基本门电路的基本门电路的VerilogVerilog描述描述1.assign1.assign语句语句assignout=a&b;assignout=a&b;2.2.门原语门原语xorxor1(out,a,b);xorxor1(out,a,b);三态门的三态门的VerilogVerilog描述描述1.assign1.assign语句语句assigndout=en?din:‘bz;assigndout=en?din:‘bz;2.2.条件语句条件语句if(en==1)dout=din;if(en==1)dout=din;elsedout=‘bz;elsedout=‘bz;全加器的全加器的VerilogVerilog描述描述wire[3:0]x,y;wirecin;wire[3:0]x,y;wirecin;reg[3:0]sum;regcout;reg[3:0]sum;regcout;描述描述11::assign{cout,sum}=x+y+cin;assign{cout,sum}=x+y+cin;描述描述22::always@(xoryorcin)always@(xoryorcin)beginbegin{cout,sum}=x+y+ci{cout,sum}=x+y+cin;n;endend描述描述33:。。。:。。。FPGA器件中,通过快速进位通道可以提高加法器的运行速度比较器的比较器的VerilogVerilog描述描述1.1.ifif语句语句always@(aorb)always@(aorb)beginbeginif(a=b){agb,asb,aeb}=3’b0if(a=b){agb,asb,aeb}=3’b001;01;elseif(a>b){agb,asb,aeb}=3’b100;elseif(a>b){agb,asb,aeb}=3’b100;elseif(a>1a>>1运算单元功能表具体电路结构具体电路结构ab1取反加减与/或异或左移右移out??实现代码(实现代码(11))modulealu(in1,in2,op,out);modulealu(in1,in2,op,out);input[15:0]in1,in2;input[15:0]in1,in2;input[3:0]op;input[3:0]op;output[15:0]out;output[15:0]out;wire[15:0]in1,in2;wire[15:0]in1,in2;wire[3:0]op;wire[3:0]op;reg[15:0]out;reg[15:0]out;实现代码(实现代码(22))parameterTransfer=4’b0001,parameterTransfer=4’b0001,Increase=4’b0010,Increase=4’b0010,Decrease=4’b0011,Decrease=4’b0011,Addition=4’b0100,Addition=4’b0100,Subtraction=4’b0101,Subtraction=4’b0101,AND=4’b0110,OR=4’bAND=4’b0110,OR=4’b0111,0111,XOR=4’b1000,NOT=4’XOR=4’b1000,NOT=4’b1001,b1001,Shift_Left=4’b1010,Shift_Left=4’b1010,Shift_Right=4’b1011;Shift_Right=4’b1011;parameter与define的区别always@(in1orin2orop)always@(in1orin2orop)beginbegincase(op)case(op)Transfer:out=in1;Transfer:out=in1;Increase:out=in1+1;Increase:out=in1+1;Decrease:out=in1–1;Decrease:out=in1–1;Addition:out=in1+in2;Addition:out=in1+in2;Subtraction:out=in1–in2;Subtraction:out=in1–in2;AND:out=a&b;AND:out=a&b;OR:out=a|b;OR:out=a|b;XOR:out=a^b;XOR:out=a^b;NOTNOT::out=~a;out=~a;Shift_Left:out=a<<1;Shift_Left:out=a<<1;Shift_Right:out=a>>1;Shift_Right:out=a>>1;endcaseendcaseendend谢谢~谢谢~