verilog流水线设计代码_流水线cpu设计verilog
大家好,又见面了,我是你们的朋友全栈君
介绍
定义:流水线设计就是将组合逻辑分割,并在各级之间插入寄存器,暂存中间数据的方法。以面积换速度。
优点:每一部分延时降低——可用更快的时钟;大部分电路同时运算——提高数据吞吐率。 缺点:增加面积;流水线并不减小单个数据操作的时间,减小的是整个数据流的操作时间; (不懂)功耗增加,硬件复杂度增加,特别对于复杂逻辑如 cpu 的流水线而言,流水越深,发生需要 hold 流水线或 reset 流水线的情况时,时间损失越大。 所以使用流水线并非有利无害,大家需权衡考虑。
应用场景: 1)组合逻辑太长,比如(a+b)*c,那么在加法和乘法之间插入寄存器是比较稳妥的做法。 2)功能模块之间的流水线,用乒乓 buffer来交互数据。代价是增加了 memory 的数量,但是和获得的巨大性能提升相比,可以忽略不计。(详见乒乓设计)
(3 4不懂) 3) I/O 瓶颈,比如某个运算需要输入 8 个数据,而 memroy 只能同时提供 2 个数据,如果通过适当划分运算步骤,使用流水线反而会减少面积。 4)片内 sram 的读操作,因为 sram 的读操作本身就是两极流水线,除非下一步操作依赖读结果,否则使用流水线是自然而然的事情。
举例 8bit 流水线加法器 非流水线:
input [7:0] a;
input [7:0] b;
output [8:0] c;
assign c[8:0] = {
1'd0, a} + {1'd0, b};
两级流水线:第一级低 4bit,第二级高 4bit,所以第一个输出需要 2 个时钟周期有效,后面的数据都是 1 个周期之后有效。
input cin;
input [7:0] cina;
input [7:0] cinb;
output [7:0] sum;
output cout;
reg cout;
reg cout1; //插入的寄存器
reg [3 :0 ] sum1 ; //插入的寄存器
reg [7 :0 ] sum;
reg [3:0] cina_reg;
reg [3:0] cinb_reg;//插入的寄存器
always @(posedge clk) //第一级流水
begin
{
cout1 , sum1} <= cina[3:0] + cinb [3:0] + cin ;
end
always @(posedge clk) //第一级同时要寄存高4位
begin
cina_reg <= cina[7:4];
cinb_reg <= cinb[7:4];
end
always @(posedge clk) //第二级流水
begin
{
cout ,sum[7:0]} <= {
{
1'b0,cina_reg[3:0]} + {1'b0,cinb_reg[3:0]} + cout1 ,sum1[3:0]} ;
end
参考资料 https://blog.csdn.net/times_poem/article/details/52033535
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/170389.html原文链接:https://javaforall.cn
相关文章
- AMD首批Zen4架构CPU,连低端R5单核性能都超英特尔旗舰,最高降价700元
- java线程与cpu线程_坑惨了什么意思
- MYSQL排查使用CPU多的SQL
- TypeError: can‘t convert CUDA tensor to numpy. Use Tensor.cpu() to copy the tensor to host memory fi
- 英伟达400亿美元收购ARM,或进军CPU领域直面英特尔
- Linux:漫漫CPU演进史(linux历史cpu)
- 量深入探索——查看Linux系统的CPU数量(linux查看cpu数)
- 利用Linux查看CPU使用情况(linuxcpu统计)
- Oracle 参数 CPU_MIN_COUNT 官方解释,作用,如何配置最优化建议
- Linux查看CPU信息方法(超简单)
- 分析Linux内存CPU性能分析实践(linux内存cpu)
- 过高MongoDB CPU 利用率过高问题排查(mongodb占用cpu)
- Linux极致性能:最多同时使用几个CPU(linux几个cpu)
- Linux下查看CPU信息的方法(linux获取cpu信息)
- 负载Linux系统下逻辑CPU负载分析(linux逻辑cpu)
- 深入浅园:Linux CPU命令的全面解析(linuxcpu命令)
- Oracle购买CPU:分析CPU性能以保障企业运算(oracle购买cpu)
- MySQL对CPU的最低性能要求(mysql对cpu的要求)
- 教你如何在Linux上查看CPU信息(linux看cpu)
- 过高解决MySQL CPU使用率过高的问题(mysqlcpu使用率)
- 占用过高解决Redis CPU占用过高的方法(rediscpu)
- Oracle:如何优化多CPU架构实现更高的性能?(oracle多cpu)
- 揭秘MySQL CPU占用率过高的原因及解决方案(mysql占cpu)
- 信息 Linux系统下查看CPU信息的方法介绍(linux 下查看cpu)
- 查看Linux系统中CPU型号的方法(查看cpu型号linux)
- rLinux操作系统中CPU的用户使用体验(linux cpu us)
- 用一核CPU加速MySQL服务器性能(1核 跑 mysql)
- Redis必不可少的CPU支持(redis需要cpu)
- 使用率Redis实现CPU使用率获取实践指南(redis获取cpu)