在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 244|回复: 12

[求助] 逻辑综合问题

[复制链接]
发表于 昨天 19:14 | 显示全部楼层 |阅读模式
50资产
module jiaozhun(clk,rstn,bs,code,ST,code_out);
input clk;
input rstn;
input bs;
input[3:0] code;
output[15:0] ST;
output[4:0] code_out;
reg[15:0] ST;
reg[4:0] code_out;
reg [4:0] dpt;
wire [4:0] ppt_d;
wire [5:0] ppt;
wire [4:0] code_out_tmp;
assign code_out_tmp = (bs)? ((code>=14)?(5'b10000)code+2))(code<=1)?(5'b00000)code-1));
always @(posedge clk or negedge rstn) begin
if(!rstn)
    dpt <= 5'b0;
else if (code_out_tmp==16)
  dpt <= 5'b0;
else
  dpt <= ppt_d;
end
assign ppt = code_out_tmp + dpt;
assign ppt_d = ppt>16?ppt-16:ppt;
reg[15:0] a;
reg[15:0] b;
always @(ppt_d)
begin
  case(ppt_d)
   5'b00000: a = 16'b0000000000000000;
   5'b00001: a = 16'b0000000000000001;
   5'b00010: a = 16'b0000000000000011;
   5'b00011: a = 16'b0000000000000111;
   5'b00100: a = 16'b0000000000001111;
   5'b00101: a = 16'b0000000000011111;
   5'b00110: a = 16'b0000000000111111;
   5'b00111: a = 16'b0000000001111111;
   5'b01000: a = 16'b0000000011111111;
   5'b01001: a = 16'b0000000111111111;
   5'b01010: a = 16'b0000001111111111;
   5'b01011: a = 16'b0000011111111111;
   5'b01100: a = 16'b0000111111111111;
   5'b01101: a = 16'b0001111111111111;
   5'b01110: a = 16'b0011111111111111;
   5'b01111: a = 16'b0111111111111111;
   5'b10000: a = 16'b1111111111111111;
  endcase
end
always @(dpt)
begin
  case(dpt)
   5'b00000: b = 16'b0000000000000000;
   5'b00001: b = 16'b0000000000000001;
   5'b00010: b = 16'b0000000000000011;
   5'b00011: b = 16'b0000000000000111;
   5'b00100: b = 16'b0000000000001111;
   5'b00101: b = 16'b0000000000011111;
   5'b00110: b = 16'b0000000000111111;
   5'b00111: b = 16'b0000000001111111;
   5'b01000: b = 16'b0000000011111111;
   5'b01001: b = 16'b0000000111111111;
   5'b01010: b = 16'b0000001111111111;
   5'b01011: b = 16'b0000011111111111;
   5'b01100: b = 16'b0000111111111111;
   5'b01101: b = 16'b0001111111111111;
   5'b01110: b = 16'b0011111111111111;
   5'b01111: b = 16'b0111111111111111;
   5'b10000: b = 16'b1111111111111111;
  endcase
end
wire [15:0] c;
wire [15:0] d;
assign c = a ^ b;
assign d = ~c;
wire [15:0] ST_tmp;
assign ST_tmp = ppt>16?d:c;
always @(posedge clk or negedge rstn) begin
if(!rstn) begin
  ST <= 16'd0;
  code_out <= 5'b0;
end
else begin
  ST <= ST_tmp;
  code_out <= code_out_tmp;
end
end
endmodule
请问一下,我这个代码,按图片上的脚本进行综合,出来的时序没问题,但生成的门级网表进行仿真时,仿真有问题,还显示锁存器有时序违例,如何解决呀

b55e60246861ab96dfff872a0f58174.jpg
发表于 昨天 19:28 | 显示全部楼层
门级网表里面还没有真实时序。一般会加仿真选项notingcheck nospecify,忽略时序检查。
发表于 昨天 19:31 | 显示全部楼层
组合逻辑,case没有default,综合会给你做latch出来
 楼主| 发表于 7 小时前 | 显示全部楼层


daodaier 发表于 2025-7-30 19:31
组合逻辑,case没有default,综合会给你做latch出来


是看check_timing.rpt里面吗,路径已经没有unconstrained_endpoints了

发表于 7 小时前 | 显示全部楼层
你的两个case语句,5bit信号都没用完,最后要加default,这是基本语法
发表于 7 小时前 | 显示全部楼层


CHN_LJF 发表于 2025-7-31 09:04
你的两个case语句,5bit信号都没用完,最后要加default,这是基本语法


组合逻辑这样干,就会产生latch。时序逻辑这样干,就保持上一个的值。
 楼主| 发表于 7 小时前 | 显示全部楼层


puxiancheng 发表于 2025-7-30 19:28
门级网表里面还没有真实时序。一般会加仿真选项notingcheck nospecify,忽略时序检查。 ...


综合后门级网表+nospecify/+notimingcheck加这两个选项没问题,不加这两个选项仿真有问题,应该是什么问题呀



 楼主| 发表于 7 小时前 | 显示全部楼层


CHN_LJF 发表于 2025-7-31 09:06
组合逻辑这样干,就会产生latch。时序逻辑这样干,就保持上一个的值。


如何不加default,有什么解决方法吗,能通过约束解决吗

发表于 6 小时前 | 显示全部楼层


新手上路哈哈哈 发表于 2025-7-31 09:09
综合后门级网表+nospecify/+notimingcheck加这两个选项没问题,不加这两个选项仿真有问题,应该是什么问 ...


就是时序不满足导致的仿真问题。
 楼主| 发表于 6 小时前 | 显示全部楼层


puxiancheng 发表于 2025-7-31 09:51
就是时序不满足导致的仿真问题。


显示的是,输出端口前一个寄存器有hold违例,应该如何修改参数呀
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条


小黑屋| 手机版| 关于我们| 联系我们| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2025-7-31 16:23 , Processed in 0.027248 second(s), 7 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表