所谓流水线处理,如同生产装配线一样,将操作执行工作量分成若干个时间上均衡的操作段,从流水线的起点连续地输入,流水线的各操作段以重叠方式执行。这使得操作执行速度只与流水线输入的速度有关,而与处理所需的时间无关。这样,在理想的流水操作状态下,其运行效率很高。
如果某个设计的处理流程分为若干步骤,而且整个数据处理是单流向的,即没有反馈或者迭代运算,前一个步骤的输出是下一个步骤的输入,则可以采用流水线设计方法来提高系统的工作频率。
下面用8位全加器作为实例,分别列举了非流水线方法、2级流水线方法和4级流水线方法。
(1)非流水线实现方式module adder_8bits(din_1, clk, cin, dout, din_2, cout);
input [7:0] din_1;
input clk;
input cin;
output [7:0] dout;
input [7:0] din_2;
output cout;
reg [7:0] dout;
reg cout;
always @(posedge clk) begin
{cout,dout} <= din_1 + din_2 + cin;
end
endmodule
得到的RTL级仿真图为:
(2)2级流水线实现方式:module adder_4bits_2steps(cin_a, cin_b, cin, clk, cout, sum);
input [7:0] cin_a;
input [7:0] cin_b;
input cin;
input clk;
output cout;
output [7:0] sum;
reg cout;
reg cout_temp;
reg [7:0] sum;
reg [3:0] sum_temp;
always @(posedge clk) begin
{cout_temp,sum_temp} = cin_a[3:0] + cin_b[3:0] + cin;
end
always @(posedge clk) begin
{cout,sum} = {{1'b0,cin_a[7:4]} + {1'b0,cin_b[7:4]} + cout_temp, sum_temp};
end
endmodule
注意:这里在always块内只能用阻塞赋值方式,否则会出现逻辑上的错误!得到的功能仿真图为:
得到的电路仿真图为:
(3)4级流水线实现方式:module adder_8bits_4steps(cin_a, cin_b, c_in, clk, c_out, sum_out);
input [7:0] cin_a;
input [7:0] cin_b;
input c_in;
input clk;
output c_out;
output [7:0] sum_out;
reg c_out;
reg c_out_t1, c_out_t2, c_out_t3;
reg [7:0] sum_out;
reg [1:0] sum_out_t1;
reg [3:0] sum_out_t2;
reg [5:0] sum_out_t3;
always @(posedge clk) begin
{c_out_t1, sum_out_t1} = {1'b0, cin_a[1:0]} + {1'b0, cin_b[1:0]} + c_in;
end
always @(posedge clk) begin
{c_out_t2, sum_out_t2} = {{1'b0, cin_a[3:2]} + {1'b0, cin_b[3:2]} + c_out_t1, sum_out_t1};
end
always @(posedge clk) begin
{c_out_t3, sum_out_t3} = {{1'b0, cin_a[5:4]} + {1'b0, cin_b[5:4]} + c_out_t2, sum_out_t2};
end
always @(posedge clk) begin
{c_out, sum_out} = {{1'b0, cin_a[7:6]} + {1'b0, cin_b[7:6]} + c_out_t3, sum_out_t3};
end
endmodule
得到的功能仿真图为:
得到的电路仿真图为:
总结:利用流水线的设计方法,可大大提高系统的工作速度。这种方法可广泛运用于各种设计,特别是大型的、对速度要求较高的系统设计。虽然采用流水线会增大资源的使用,但是它可降低寄存器间的传播延时,保证系统维持高的系统时钟速度。在实际应用中,考虑到资源的使用和速度的要求,可以根据实际情况来选择流水线的级数以满足设计需要。
这是一种典型的以面积换速度的设计方法。这里的“面积”主要是指设计所占用的FPGA逻辑资源数目,即利用所消耗的触发器(FF)和查找表(LUT)来衡量。“速度”是指在芯片上稳定运行时所能达到的最高频率。面积和速度这两个指标始终贯穿着FPGA的设计,是设计质量评价的最终标准。
- 大小: 8 KB
- 大小: 6 KB
- 大小: 8.6 KB
- 大小: 6.6 KB
- 大小: 6.1 KB
分享到:
相关推荐
高等学校电子信息类专业系列教材 EDA原理及Verilog HDL实现 从晶体管、门电路到Xilinx Vivado的数字系统设计
计算机加、减、乘、除及开方的各种算法(包括Wallace Tree快速乘法器和Newton-Raphson及Goldschmidt除法和开方算法)及其VerilogHDL实现;指令系统结构和ALU及多端口寄存器堆的 Verilog HDL 设计;单周期、多周期和...
流水线加法器的Verilog HDL 源代码
简单基本流水线CPU设计VerilogHDL(含源代码+报告+原理图) 简单的流水线CPU,报告原始设计图,VerilogHDL语言的代码,已经Quartus工程项目 设计文档等等
EDA设计,Verilog HDL硬件语言基础
一个用Verilog HDL语言所写的32位MIPS指令系统流水线CPU,内附详细的代码以及报告文档,还有运行结果截图。CPU实现了20余条常用指令。
国外牛人用VerilogHDL写的I2C库,可直接使用。
Xilinx FPGA原理与实践—基于Vivado和Verilog HDL 课件
VerilogHDL语言学习资料基础教程文档资料合集(13份): VerilogHDL扫盲文.pdf verilogHDL精粹1.pdf verilog_经验(适合初学者).pdf Verilog基础知识.pdf verilog开发的官方手册.pdf Verilog的135个经典设计实例.pdf ...
该程序是基于FPGA verilog HDL设计的一个流水呼吸灯的设计(4个LED实现流水和呼吸的效果),适合初学者学习,博客: https://blog.csdn.net/qq_40261818/article/details/81360202
这是之前做设计的时候存下来的代码,通过quartus使用verilog hdl实现的基本PID控制,做的不算好,只实现了基本的PID控制,精度不敢保证。 之前本来想在网上找,但是找不到不到只能自己学着写。 应付一下课程设计和...
EDA技术与Verilog HDL教程PPT课件+北航verilog讲稿PPT文档资料,FPGA学习,verilog HDL语言学习资料,教程PPT文档资料。
运用VerilogHDL实现AD7862的数据采集设计
Verilog HDL数字设计与综合(第二版) 第六章课后习题答案.pdfVerilog HDL数字设计与综合(第二版) 第六章课后习题答案.pdfVerilog HDL数字设计与综合(第二版) 第六章课后习题答案.pdfVerilog HDL数字设计与综合(第二版...
硬件描述语言Verilog HDL练习题,供初学者使用参考
用verilog语言实现简单的流水灯,编译环境为quartusII6.0 在板子上试过的了
利用Verilog HDL语言,实现的数字时钟,结果简单,非常通俗易懂,容易通读,非常适合初学者下载
LDPC码verilog HDL 实现,包括LDPC编码和译码。以及文献资料
Verilog HDL数字集成电路设计原理与应用.rar
Verilog语言实现的数字下变频设计。 在ALTERA的QUARTUS ii下实现。实用,好用。 (Verilog language implementation of the digital down-conversion design. ALTERA at the implementation of QUARTUS ii. Practical...