微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 帮忙看这句语句怎么优化(verilog)

帮忙看这句语句怎么优化(verilog)

时间:10-02 整理:3721RD 点击:
always @ (posedge clk or negedge rstn)
begin
if(!rstn)
CbCr_out<= 8'b0;
else
CbCr_out <= CbCr_pre[10]? 8'h00 : (CbCr_pre[9]| CbCr_pre[8]) ? 8'hff : CbCr_pre[7:0]; ////就是这个语句
end
编译后发现程序中 CbCr_out 严重影响了fmax导致达不到要求,
想把这个语句优化下以减少内部延时,请知道怎么改写比较好啊?

如果这条路径确实是critical path的话,在中间插个dff吧.
把(CbCr_pre[9]| CbCr_pre[8]) ? 8'hff : CbCr_pre[7:0]用一个reg变量寄存一下.
不过要注意满足时序.

尝试这样写
always @ (posedge clk or negedge rstn)
begin
if(!rstn)//异步清零
CbCr_out<= 8'b0;
else if( CbCr_pre[10] )//同步清零
CbCr_out<= 8'b0;
else if( CbCr_pre[9]| CbCr_pre[8] )//同步置位
CbCr_out<= 8'hff;
else
CbCr_out <= CbCr_pre[7:0];
end
如果你的综合库中包含了带同步清零和置位的触发器,那么综合出来的结果要比你的写法性能要好,如果没有的话,那就要考虑其他方法了

也乡了解一下 谢谢

我觉得这段代码应该可以达到时钟要求的吧
请教问下karnizhu,你的写法相比有什么好处

CbCr_out <= {8{CbCr_pre[10]}} && ({8{CbCr_pre[9] | CbCr_pre[8]}} ||CbCr_pre[7:0]);

我认为
个人意见!
你用香农公式展开或用面积转化成速度的方法!

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top