1、速度和面积互换原则
速度指整个工程稳定运行所能达到的最高时钟频率,与寄存器建立时间、保持时间、外部接口时序要求、逻辑延时、走线延时等因素相关。
面积指消耗的触发器、查找表等硬件资源数量。
速度与面积是相互矛盾且可相互转换的。
2、乒乓操作
乒乓操作主要对数据流进行控制,实现数据流的无缝衔接。原理如下:
3、串/并转换
串并转换可采用寄存器、双口RAM、SDRAM、SRAM、FIFO等实现。
4、流水线设计
如果某个设计可以分为若干个步骤进行处理,且数据处理过程是单向的,没有反馈运算或迭代运算,就可以考虑采用流水线设计,以提高系统的工作频率。
如上图所示,可将复杂组合逻辑分为多个组合逻辑,并插入触发器实现流水线处理。
5、模块化设计
模块化设计将大规模复杂系统按照一定规则划分为多个模块,如下图。
对于顶层及中间模块,一般只做模块的黏合,只在叶子模块做逻辑设计,实现模块间的低耦合,便于后期维护与升级。
6、时钟设计
1) 内部逻辑产生的时钟
避免组合逻辑直接输出时钟信号,可使用专用时钟信号(外部晶振输入或PLL输出时钟)打一拍,进行同步处理。时钟和复位信号最好走全局时钟网络。
2) 使用使能时钟
对于时钟分频,可使用原来的时钟信号,利用使能信号实现分频功能。
module clk_div_en
#(
parameter CLKDIV = 4 // 时钟分频数
)
(
input clk, // 时钟
input rst_n, // 复位信号
output wire en // 使能信号
);
/* 时钟计数器 */
reg [15:0] clk_cnt;
always @(posedge clk or negedge rst_n) begin
if(!rst_n) clk_cnt <= 1'b0;
else if(clk_cnt == CLKDIV - 1) clk_cnt <= 1'b0;
else clk_cnt <= clk_cnt + 1'b1;
end
/* 产生使能信号 */
assign en = (clk_cnt == CLKDIV - 1);
endmodule
3) 门控时钟
门控时钟通常使用门控信号与时钟信号相与实现,能够降低系统功耗。
门控时钟不符合同步设计的思想,可采用如下设计进行改善。
在时钟下降沿将门控信号打一拍,再与时钟信号相与。