第三章 数字IC系统的RTL级设计
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
.D5(RAM3_D1),
.D6 (RAM3_D2), .A5 (RAM3_A1), .A6 (RAM3_A2),
module TOP ( … BIST U1 ( .D1 (RAM1_D1), .D2 (RAM1_D2), .A1 (RAM1_A1), .A2 (RAM1_A2)),
U3 ( .D1(RAM3_D1), .D2 (RAM3_D2), .A1 (RAM3_A1), .A2 (RAM3_A2),
采用 if…else 结构
module single_if ( a, b, c, d, sel ) input a, b, c, d; input[3:0] sel; output z; reg z; always @( a or b or c or d or sel ) begin z = 0;
二、同步电路的设计要求
• 寄存器的结构
• 寄存器的结构
寄存器的功能
• 建立时间与保持时间
• recovery/removal
§2 几个典型问题的处理
• • • • • 状态机设计 多时钟域的处理 时钟切换问题 时延问题 布线问题
一、状态机的设计
状态机的分类: • Mealy模型 • Moore模型
//状态寄存器,时序逻辑
always @ ( posedge clk or negedge rst_n ) if ( ! rst_n ) state <= IDLE; else state <= next;
//新状态产生,组合逻辑
Always @ ( state or go or ws ) begin next = 2’bx; case ( state ) IDLE: if (go ) next = READ; else next = IDLE; READ: next = DLY; DLY: if ( ws ) next = READ; else next = DONE; DONE: next = IDLE; endcase end
改进方法1: 让输出信号经过一个寄存器再输出
//对输出信号进行寄存
Always @ ( posedge clk or negedge rst_n ) if ( ! Rst_n ) begin ds <= 1’b0; rd <= 1b’0; end else
begin ds <= 1’b0; rd <= 1b’0; case ( state ) IDLE: if (go ) rd <= 1’b1; READ: rd <= 1’b1; DLY: if ( ws ) rd <= 1’b1;; else ds <= 1’b1; endcase end endmodule
一、数字IC系统的RTL模型
同步电路示例
数字IC系统的RTL模型
• RTL模型的重点是寄存器和其间的组合逻 辑; • 设计被抽象为一系列的寄存器,而信号随着 时钟从一个寄存器传递到另一个寄存器; • RTL模型反映了数字系统的几个要素、寄存 器组成的时序逻辑、寄存器之间的组合逻辑 以及关键的时钟信号。
2 瓶颈
。。。 module TOP ( … BIST U1 ( .D1 (RAM1_D1), .D2 (RAM1_D2), .A1 (RAM1_A1), .A2 (RAM1_A2), .D3 (RAM2_D1), .D4 (RAM2_D2), .A3 (RAM2_A1), .A4 (RAM2_A2), RAM RAM1(… RAM2(… RAM3(… endmodule ……
例:状态机的RTL代码编写
module fsm1 ( ds, rd, go, ws, clk, rst_n) output ds, rd; input go, ws; input clk, rst_n; reg ds, rd; parameter [1:0] IDLE = 2’b00; READ = 2’b01; DLY = 2’b10; DONE = 2’b11; reg [1:0] state,next
改进方法2: 直接把状态作为输出信号
二、多时钟域的处理
问题:在两个时钟域之间传递信号时,不 可避免地出现建立时间/保持时间违例的 问题。 1位信号的传送
多时钟域间信号的传递
使 用 同 步 电 路 的 情 况
较短的信号脉冲在经过同步电路时的情况
反馈同步方法
三、时钟切换问题
四、时延问题
1 选择合适的结构 例:四选一数据选择器
//采用多个连续的if判断 module mult_if ( a, b, c, d, sel, z ) input a, b, c, d; input [3:0] sel; output z; reg z; always @( a or b or c or d or sel ) begin z = 0; if ( sel[0] ) z=a; if ( sel[1] ) z=b; if ( sel[2] ) z=c; if ( sel[3] ) z=d; end endmodule
RAM RAM1(… U2 ( .D1 (RAM2_D1), .D2 (RAM2_D2), .A1 (RAM2_A1), .A2 (RAM2_A2), RAM2(… RAM3(… endmodule ……
3 广播信号
例:状态机产生的控制信号供整个芯片使用
if (sel[3]) z = d; else if (sel[2]) z = c; else if (sel[1]) z = b; else if (sel[0]) z = a; end endmodule
使用case语句
begin module case1 ( a, b, c, d, sel ) input a, b, c, d; input[3:0] sel; output z; reg z; always @( a or b or c or d or sel ) case ( sel ) 4’b1xxx: z = d; 4’bx1xx: z = c; 4’bxx1x: z = b; 4’bxxx1: z = a; default: z = 1’b0; endcase end endmodule
第三章数字ic系统的rtl级设计rtl设计的主要工作一数字ic系统的rtl模型icrtl设计被抽象为一系列的寄存器而信号随着时钟从一个寄存器传递到另一个寄存器
第三章 数字IC系§1 RTL设计基础
• 数字IC系统的RTL模型 • 同步电路的设计要求
3 优化或分割关键路径中的组合逻辑
五、布线问题
1 热点
reg [2:0] sel; reg[127:0] A, B, C, D, E, F, G, H, M; always @ ( A or B or C or D or E or F or G or H or sel) begin case ( sel ) 3’b000 : M = A; 3’b001 : M = B; 3’b010 : M = C; 3’b011 : M = D; 3’b100 : M = E; 3’b101 : M = F; 3’b110 : M = G; 3’b111 : M = H; endcase
2 处理迟到的信号
例:四选一数据选择器
module mult_if ( a, b_late, c, d, sel, z ) input a, b_late, c, d; input [3:0] sel; output z; reg z, z1; always @( a or b_late or c or d or sel ) begin z1 = 0; if ( sel[0] ) z1 = a; if ( sel[2] ) z1 = c; if ( sel[3] ) z1 = d; if ( sel[1] &~(sel[2]sel[3])) z = b_late; else z = z1; end endmodule
//输出 assign rd = (state == READ || state == DLY) ; assign ds = (state == DONE); endmodule
组合逻辑输出的缺点:
• 组合逻辑的输出波形在状态转换的过程中会出现 毛刺; • 组合逻辑的输出消耗了整个时钟周期的一部分。
.D6 (RAM3_D2), .A5 (RAM3_A1), .A6 (RAM3_A2),
module TOP ( … BIST U1 ( .D1 (RAM1_D1), .D2 (RAM1_D2), .A1 (RAM1_A1), .A2 (RAM1_A2)),
U3 ( .D1(RAM3_D1), .D2 (RAM3_D2), .A1 (RAM3_A1), .A2 (RAM3_A2),
采用 if…else 结构
module single_if ( a, b, c, d, sel ) input a, b, c, d; input[3:0] sel; output z; reg z; always @( a or b or c or d or sel ) begin z = 0;
二、同步电路的设计要求
• 寄存器的结构
• 寄存器的结构
寄存器的功能
• 建立时间与保持时间
• recovery/removal
§2 几个典型问题的处理
• • • • • 状态机设计 多时钟域的处理 时钟切换问题 时延问题 布线问题
一、状态机的设计
状态机的分类: • Mealy模型 • Moore模型
//状态寄存器,时序逻辑
always @ ( posedge clk or negedge rst_n ) if ( ! rst_n ) state <= IDLE; else state <= next;
//新状态产生,组合逻辑
Always @ ( state or go or ws ) begin next = 2’bx; case ( state ) IDLE: if (go ) next = READ; else next = IDLE; READ: next = DLY; DLY: if ( ws ) next = READ; else next = DONE; DONE: next = IDLE; endcase end
改进方法1: 让输出信号经过一个寄存器再输出
//对输出信号进行寄存
Always @ ( posedge clk or negedge rst_n ) if ( ! Rst_n ) begin ds <= 1’b0; rd <= 1b’0; end else
begin ds <= 1’b0; rd <= 1b’0; case ( state ) IDLE: if (go ) rd <= 1’b1; READ: rd <= 1’b1; DLY: if ( ws ) rd <= 1’b1;; else ds <= 1’b1; endcase end endmodule
一、数字IC系统的RTL模型
同步电路示例
数字IC系统的RTL模型
• RTL模型的重点是寄存器和其间的组合逻 辑; • 设计被抽象为一系列的寄存器,而信号随着 时钟从一个寄存器传递到另一个寄存器; • RTL模型反映了数字系统的几个要素、寄存 器组成的时序逻辑、寄存器之间的组合逻辑 以及关键的时钟信号。
2 瓶颈
。。。 module TOP ( … BIST U1 ( .D1 (RAM1_D1), .D2 (RAM1_D2), .A1 (RAM1_A1), .A2 (RAM1_A2), .D3 (RAM2_D1), .D4 (RAM2_D2), .A3 (RAM2_A1), .A4 (RAM2_A2), RAM RAM1(… RAM2(… RAM3(… endmodule ……
例:状态机的RTL代码编写
module fsm1 ( ds, rd, go, ws, clk, rst_n) output ds, rd; input go, ws; input clk, rst_n; reg ds, rd; parameter [1:0] IDLE = 2’b00; READ = 2’b01; DLY = 2’b10; DONE = 2’b11; reg [1:0] state,next
改进方法2: 直接把状态作为输出信号
二、多时钟域的处理
问题:在两个时钟域之间传递信号时,不 可避免地出现建立时间/保持时间违例的 问题。 1位信号的传送
多时钟域间信号的传递
使 用 同 步 电 路 的 情 况
较短的信号脉冲在经过同步电路时的情况
反馈同步方法
三、时钟切换问题
四、时延问题
1 选择合适的结构 例:四选一数据选择器
//采用多个连续的if判断 module mult_if ( a, b, c, d, sel, z ) input a, b, c, d; input [3:0] sel; output z; reg z; always @( a or b or c or d or sel ) begin z = 0; if ( sel[0] ) z=a; if ( sel[1] ) z=b; if ( sel[2] ) z=c; if ( sel[3] ) z=d; end endmodule
RAM RAM1(… U2 ( .D1 (RAM2_D1), .D2 (RAM2_D2), .A1 (RAM2_A1), .A2 (RAM2_A2), RAM2(… RAM3(… endmodule ……
3 广播信号
例:状态机产生的控制信号供整个芯片使用
if (sel[3]) z = d; else if (sel[2]) z = c; else if (sel[1]) z = b; else if (sel[0]) z = a; end endmodule
使用case语句
begin module case1 ( a, b, c, d, sel ) input a, b, c, d; input[3:0] sel; output z; reg z; always @( a or b or c or d or sel ) case ( sel ) 4’b1xxx: z = d; 4’bx1xx: z = c; 4’bxx1x: z = b; 4’bxxx1: z = a; default: z = 1’b0; endcase end endmodule
第三章数字ic系统的rtl级设计rtl设计的主要工作一数字ic系统的rtl模型icrtl设计被抽象为一系列的寄存器而信号随着时钟从一个寄存器传递到另一个寄存器
第三章 数字IC系§1 RTL设计基础
• 数字IC系统的RTL模型 • 同步电路的设计要求
3 优化或分割关键路径中的组合逻辑
五、布线问题
1 热点
reg [2:0] sel; reg[127:0] A, B, C, D, E, F, G, H, M; always @ ( A or B or C or D or E or F or G or H or sel) begin case ( sel ) 3’b000 : M = A; 3’b001 : M = B; 3’b010 : M = C; 3’b011 : M = D; 3’b100 : M = E; 3’b101 : M = F; 3’b110 : M = G; 3’b111 : M = H; endcase
2 处理迟到的信号
例:四选一数据选择器
module mult_if ( a, b_late, c, d, sel, z ) input a, b_late, c, d; input [3:0] sel; output z; reg z, z1; always @( a or b_late or c or d or sel ) begin z1 = 0; if ( sel[0] ) z1 = a; if ( sel[2] ) z1 = c; if ( sel[3] ) z1 = d; if ( sel[1] &~(sel[2]sel[3])) z = b_late; else z = z1; end endmodule
//输出 assign rd = (state == READ || state == DLY) ; assign ds = (state == DONE); endmodule
组合逻辑输出的缺点:
• 组合逻辑的输出波形在状态转换的过程中会出现 毛刺; • 组合逻辑的输出消耗了整个时钟周期的一部分。