问题
有以下代码:
wire bus_en;//整体使能,控制下述所有信号有效
wire bus_a_en;//bus_a有效
wire [WD -1:0]bus_a;
wire bus_b_en;//bus_b有效
wire [WD -1:0]bus_b;
这是一种常见的总线结构,即通过整体en信号控制整体总线有效,再通过分路en信号(比如strb)控制部分信息有效。那么现在要将bus_a和bus_b打拍,请问从降低功耗的角度:
- 当WD = 3时应该如何打拍?
- 当WD = 6时应该如何打拍?
分析
既然要功耗低,那肯定是要把data信息的复位去除的,因此这题里面信号的打拍方式,可以选择的无非就以下不带复位的三种打拍方式:
always @(posedge clk or negedge rst_n)begin
bus_a_ff <= bus_a;
end
always @(posedge clk or negedge rst_n)begin
if(bus_en) bus_a_ff <= bus_a;
end
always @(posedge clk or negedge rst_n)begin
if(bus_en && bus_a_en) bus_a_ff <= bus_a;
end
进一步的,把第一种打拍方式去掉,拍拍翻转那么功耗不用想了直接爆表。余下的只有两种:
//打拍方式1
al