Verilog HDL 综合要点[1] - mux结构及条件补全

1. 如果case语句或者if - else - if语句中的条件语句不是互为唯一的,那么该语句将被综合为优先级结构;如果条件语句唯一,则被综合为mux结构。
//综合为优先级结构
always @(data) begin
    casex(data)
        8'b1xxx_xxxx : code = 7;
        8'b01xx_xxxx : code = 6;
        8'b001x_xxxx : code = 5;
        8'b0001_xxxx : code = 4;
        8'b0000_1xxx : code = 3;
        8'b0000_01xx : code = 2;
        8'b0000_001x : code = 1;
        8'b0000_0001 : code = 0;
        default         : code = 3'bx;
    endcase
end
//综合为mux结构
always @(data) begin
    case(data)
        8'b0000_0001: code = 0;
        8'b0000_0010: code = 1;
        8'b0000_0100: code = 2;
        8'b0000_1000: code = 3;
        8'b0001_0000: code = 4;
        8'b0010_0000: code = 5;
        8'b0100_0000: code = 6;
        8'b1000_0000: code = 7;
        default: code = 3'bx;
    endcase
end

2. 如果case或if - else - if 语句中语句是完整的,也就是各种条件可能都出现了,则不需要综合出锁存器。如果确实有条件是无关紧要的,或是根本不可能出现的,通过使用带任意值的default语句或else语句补全,可以缩减实现的器件尺寸
//完全不会产生锁存的设计
always @(data_3 or data_2 or data_1 or data_0 or select) begin
    
    case (select)
        0: mux_in = data_3;
        1: mux_in = data_2;
        2: mux_in = data_1;
        3: mux_in = data_0;  
        default: mux_in = 32'bx;
    endcase
end
//这样也不会产生锁存,因为default语句补全了case语句
always @(data_3 or data_2 or data_1 or data_0 or select) begin
    
    case (select)
        0: mux_in = data_3;
        1: mux_in = data_2;
        2: mux_in = data_1;
        //3: mux_in = data_0;  
        default: mux_in = 32'bx;
    endcase
end
//这样需要锁存
always @(data_3 or data_2 or data_1 or data_0 or select) begin
    
    case (select)
        0: mux_in = data_3;
        1: mux_in = data_2;
        2: mux_in = data_1;
        //3: mux_in = data_0;  
        //default: mux_in = 32'bx;
    endcase
end


[本日志由 admin 于 2010-06-24 04:29 PM 编辑]
文章来自: 本站原创
引用通告地址: http://www.decell.org/trackback.asp?tbID=130
Tags: FPGA Verilog
评论: 0 | 引用: 0 | 查看次数: 102
发表评论
昵 称:
密 码: 游客发言不需要密码.
验证码:
内 容:
选 项:
虽然发表评论不用注册,但是为了保护您的发言权,建议您注册帐号.
字数限制 1000 字 | UBB代码 开启 | [img]标签 关闭