2020/04/03 从事fpga开发经典图书。今天开始阅读英文原版。因为买到的汉语版本讲的很差。
上图很清晰的说明了软件的处理流程,解释了为什么只要改动rt必须从头编译。
第一章:介绍achitecting speed
三大影响因素:吞吐量,延时,时序(在逻辑内部主要有器件本生决定)
时序的优化主要是降低了组合逻辑在关键路径中的延迟。
1.1高吞吐率设计:主要是稳定状态下的数据速率。单位bit/clock
引出了pipeline的概念(流水线);优点:新的数据可以再上一个数据没有完成之前被处理;通过计算x三次方的例子来说明迭代实现和流水线实现的差别。迭代实现典型例子(for循环),pipeline实现过程中不能有闭环操作。
缺点:流水线实现的方式增加了资源的占用。
1.2 低延迟:尽可能在输入和输出之间缩短时间
通常需要并行处理,删除流水线和逻辑捷径,会导致吞吐率和最大时钟速率降低。(在例子中计算x3,利用阻塞赋值实现低延迟)。
缺点:降低了系统的时钟周期,并且增加了寄存器中组合逻辑的延迟。
module power3(
output [7:0] xpower,
output finished,
input [7:0] x,
input clk,
input start
);
reg [7:0] cnount;
assign finished = (ncount == 0);
always @(posedge clk)
if(start ) begin
xpower <= x;
ncount <= 2;
end
else if (!finished) begin
ncount <= ncount -1;
xpower <= xpower *x;
end
endmodule
//pipeline xpower
module power3(
output reg [7:0] xpower,
input [7:0] x,
input clk
);
reg [7:0]xpower1,xpower2;
reg [7:0] x1,x2;
always @(posedge clk)
begin //sequence
//pipeline
x1 <= x;
xpower1 <= x;
//popeline
x2 <= x1;
xpower2 <= xpower1*x1;
//pipeline
xpower <= xpower2*x2;
end
endmodule