组合逻辑过程块

组合逻辑过程块组合逻辑过程块 always comb 代表组合逻辑 always comb 过程块表示建立组合逻辑模型 always comb if mode y a b else y a b always comb 能推断出其敏感表 与通用 always 过程块不同 always comb 块的后面不需要指明敏感表

大家好,我是讯享网,很高兴认识大家。

组合逻辑过程块

always_comb if(!mode) y = a + b; else y = a - b; 

讯享网


讯享网

讯享网禁止出现共享变量 

always_comb过程块仍然要求被赋值的变量不能再次在其他过程被赋值。这样限制避免了非组合逻辑的共享变量的出现。这种限制也符合综合的指导原则,并且确保了所有的软件工具(不仅仅是综合工具)都采用同样的建模规则。
无歧义的设计意图
零时刻自动求值
always_comb确保输出与输入值保持时间一致
always_comb过程块与always过程块的另一个不同之处在于,在所有initial和always过程块启动后,always_comb块会在仿真的零时刻自动出发。不管推断出的敏感表中的信号是否发生了变化,这样的自动求值都会发生。always_comb的这种特殊的语义确保了组合逻辑在零时刻产生与输入相对应的输出结果。特别是在使用缺省值为逻辑0的两态变量建模时,这种零时刻的自动求值显得尤为重要,复位信号很可能不会引起组合逻辑的敏感表中的信号发生变化。而如果没有变化,通用always过程块不会被触发,从而使输出变量也不会变化。

一个采用枚举类型建模的简单有限状态机。 三个可能的状态是WAITE、LOAD、STORE 。状态机复位后处于WAITE状态。状态机的 组合逻辑会对当前状态进行解码,如果当前 状态的组合逻辑为WAITE,则下一个状态为LOAD。 在每个clock信号的上升沿,状态时序逻辑都会将 变量NextState的值赋给变量State module controller( output logic read,write, input instr_t instruction, input logic clock,resetN ); enum {WAITE,LOAD,STORE}State,NextState; always@(posedge clock,negedge resetN) if(!resetN) State <= WAITE; else State <= NextState; always@(State) begin case(State) WAITE:NextState = LOAD; LOAD:NextState = STORE; STORE:NextState = WAITE; encase end always@(State,instruction) begin read = 0; write = 0; if(State == LOAD && instruction == FETCH) read = 1; else if(State ==STORE && instruction == WRITE) write = 1; end endmoudle 
讯享网module controller( output logic read,write, input instr_t instruction, input logic clock,resetN ); enum {WAITE,LOAD,STORE}State,NextState; always@(posedge clock,negedge resetN) if(!resetN) State <= WAITE; else State <= NextState; always_comb begin case(State) WAITE:NextState = LOAD; LOAD:NextState = STORE; STORE:NextState = WAITE; encase end always_comb begin read = 0; write = 0; if(State == LOAD && instruction == FETCH) read = 1; else if(State ==STORE && instruction == WRITE) write = 1; end endmoudle 
always_comb过程块会对data、sel、c、d和e敏感 always@* //推断出@(data) begin a1 = data << 1; b1 = decode(); ... end always_comb //推断出@(data,sel,c,d,e) begin a2 = data << 1; b2 = decode(); ... end funciton decode;//不带输入的函数 begin case(sel) 2'b01: decode = d|e; 2'b10:decode = d&e; default : decode = c; endcase end endfunction 
小讯
上一篇 2025-01-19 11:54
下一篇 2025-02-21 20:27

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/117628.html