input clk,clrb; input [3:0] d; output [3:0] q; reg [3:0]q;
always @(posedge clk or posedge clrb) begin
if(clrb)
q<=0; else
q<=d;
end endmodule
10.1 加法器
4位并行加法器:
module add_4(X,Y,sum,C); input [3:0] X,Y; output[3:0] sum; output C;
assign {C, sum}=X+Y; endmodule
16位并行加法器:
module add_16(X,Y,sum,C); input [15:0] X,Y; output [15;0] sum; output C;
assign {C, sum}=X+Y; endmodule
10.2 乘法器
4位乘法器
module mult_4(X,Y,Product); input [3:0] X,Y; output [7:0] Product; assign Product=X*Y; endmodule
8位乘法器:
module mult 8(X,Y,Product); input [7:0] X,Y;
output [15:0] Product; assign Product=X*Y; endmodule
10.3 比较器
module compare_n (X,Y,XGY,XSY,XEY); else XEY=0; input [width-1:0] X,Y; if(X>Y) output XGY, XSY,XEY; XGY=1; reg XGY, XSY, XEY; parameter width=8; always @(X or Y) begin
if(X==Y) XEY=1; 10.4
else XGY=0; if(X XSY=1; else XSY=0; end endmodule 多路选择器 module Mux_8(addr,in1,in2,in3,in4,in5,in6,in7,in8,Mout,nCS); input [2:0] addr; input [with-1:0] in1,in2,in3,in4,in5,in6,in7,in8; input nCS; output [wdth-1:0] Mout; reg [wdth-1:0] Mout; parameter with=8; always@ (addr or in1 or in2 or in3 or in4 or in5 or in6 or in7 or in8 or nCS) begin if(!nCS) //nCS低电平使多路选择器工作 case(addr) 3’b000: Mout=in1; 3’b001: Mout=in2; 3’b010: Mout=in3; 3’b011: Mout=in4; 3’b100: Mout=in5; 3’b101: Mout=in6; 3’b110: Mout=in7; 3’b111: Mout=in8; endcase else //nCS高电子关闭多路选择器 Mout=0; end endmodule 10.6 流水线 提高速度的有效方法:在已设计好的数字逻辑中插入寄存器,形成流水线,可以大大提高处理速度。 流水线加法器和组合逻辑加法器的比较: 16位全加器 组合逻辑加法器:占用34个宏单元,总延迟45.6ns 流水线加法器:占用81个宏单元,总延迟15.1ns 运算吞吐量增加了3倍! 重要概念: 数字系统设计中的一个矛盾问题:面积 —— 速度 第12章 同步状态机的原理、结构和设计 1.什么是有限状态机 - 有限状态机是由寄存器组和组合逻辑构成的硬件时序电路; - 其状态(即由寄存器组的1和0的组合状态所构成的有限个状态)只能在同一时钟跳变沿的情况下才能从一个状态转向另一个状态; - 究竟转向哪一状态不但取决于各个输入值,还取决于当前状态。 - 状态机可用于产生在时钟跳变沿时刻开关的复杂的控制逻辑,是数字逻辑的控制核心。 2.Moore状态机 定义:如果时序逻辑的输出只取决于当前的状态,称之为Moore状态机。 结构: 高速状态机设计方法 1.在设计高速电路时,把状态变量直接用作输出 2.在输出逻辑G后面再加一组与时钟同步的寄存器输出流水线寄存器,即完全同步地输出,这种输出称为流水线化的输出(Pipelined outputs)的Mealy状态机。 要点: 对于用FPGA实现的有限状态机建议采用独热码。因为虽然独热编码多用了两个触发器,但所用组合电路可省一些,因而使电路的速度和可靠性有显著提高,而总的单元数并无显著增加。 采用独热编码后出现多余的状态,即一些不可到达的状态,因此,在case语句的最后需要增加default分支项。 有限状态机设计的一般步骤: (1)逻辑抽象,得出状态转换图;——手工完成 (2)状态化简;——手工或计算机完成 如果在状态转移图中出现这样两个状态:它们在相同的输入下转换到同一状态去,并得到相同的输出,则称它们为等价状态。等价状态是重复的,可以合并为一个。 (3)状态分配(状态编码);——手工完成 在触发器资源丰富的FPGA或ASIC设计中,采用独热编码(one-hot-coding)。 (4)选定触发器的类型并求出状态方程、驱动方程和输出方程。——计算机完成 (5)按照方程得出逻辑图。——计算机完成 13.1Verilog HDL设计可综合的状态机的指导原则 1、在采用FPGA设计状态机时最好用One—Hot编码;采用CPLD器件设计状态机时采用顺序编码方式(自然二进制数); 2、采用case、casex或casez语句建立状态机模型,注意Default项,并将状态变量设为初始状态或’bx; 3、状态机应该有一个异步或同步复位端,以便在加电时将电路复位到有效状态,CPLD/FPGA器件都支持异步复位; 4、状态转换只能由一个时钟控制,即设计为同步状态机,否则综合工具将生成错误电路。 5、如果一定要设计异步状态机,建议采用电路图输入的方法,或用实例引用的写法把几个引用的实例用异步时钟连接起来,而不要直接用Verilog RTL级别的描述方法通过综合来产生。