首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

可综合的verilog语法子集(2)

可综合的verilog语法子集(2)

8. 比较下面代码,分别综合出什么,可能出现什么问题

module dff_en(I_en, I_data, I_clock, O_data);

input I_clock;

input I_en;

input I_data;

output O_data;

reg R_data;

assign O_data = R_data;

always @(I_clock)

begin

if (I_en == 1) R_data <= I_data;

end

endmodule

有以下告警(用synplify综合)

(1) Incomplete sensitivity list - assuming completeness

(2) Referenced variable I_en is not in sensitivity list

(3) Referenced variable I_data is not in sensitivity list

(4) Latch generated from always block for signal

如果改always @(I_clock)为always @(posedge I_clock)就可以避免,并产生一个带使能的DFF

9. 下面逻辑有没有问题?

module dff_en(I_reset1, I_reset2, I_data, I_clock, O_data);

input I_clock;

input I_reset1;

input I_reset2;

input I_data;

output O_data;

reg R_data;

assign O_data = R_data;

always @(negedge I_reset1 or posedge I_clock) // 敏感变量I_reset2在时钟

begin

if (I_reset1 == 0) R_data <= 0;

else if (I_reset2 == 0) R_data <= 1;

else R_data <= I_data;

end

endmodule

综合时不会有告警,产生一个带复位和置位的DFF,最好改always @(negedge I_reset1 or posedge I_clock)为always @(negedge I_reset1 or negedge I_reset2 or posedge I_clock)

10.逻辑综合结果是什么?

module mux2s1(I_sel, I_a, I_b, O_c, O_d)

input I_sel, I_a, I_b;

output O_c, O_d;

reg R_c;

reg R_d;

assign O_c = R_c;

assign O_d = R_d;

always @(I_sel, I_a, I_b)

begin

case (I_sel)

1'b0: R_c = I_a; // 综合出latch

1'b1: R_d = I_b; // latch

endcase

end

endmodule

该逻辑将产生锁存器。

11.下面代码综合结果是什么?




module dff_sys(I_clock, I_data, O_data);

input I_clock, I_data;

output O_data;

reg R_b, R_c, R_d;

always @(posedge I_clock)

begin

R_c = R_b;

R_b = I_data;

R_d <= R_c;

end

endmodule

module dff_sys(I_clock, I_data, O_data);

input I_clock, I_data;

output O_data;

reg R_b, R_c, R_d;

always @(posedge I_clock)

begin

R_c = R_b;

R_d <= R_c;

R_b = I_data;

end

endmodule




两段逻辑都没有任何区别,综合电路如下,这也说明了non-block语句的特点
继承事业,薪火相传
返回列表