OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4150|回复: 5

[XILINX] FPGA设计仿真和ILA分析不一致的问题

[复制链接]

3

主题

8

帖子

0

精华

新手上路

积分
36
金钱
36
注册时间
2022-11-29
在线时间
9 小时
发表于 2023-2-21 15:34:11 | 显示全部楼层 |阅读模式
2金钱
关于代码内部的一个计数器 ,设置的是关于SCLK下降沿加一,仿真结果也是这样的,如下图

但是固化到板子上,用ILA观察  

在下降沿+1的同时   中间还有一个加的过程 ,但是这个加一和SCLK无关,与另一个时钟的上升沿重合  但是 在always语句中,CNT没有跟其他的信号联系,求大佬帮帮忙

最佳答案

查看完整内容[请看2#楼]

我把内部逻辑(组合逻辑)中的一个wire当作内部时钟信号了,因为这个信号存在着毛刺,所以影响了正常的功能,但在仿真中不会体现,在实际上板验证会出现错误
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

8

帖子

0

精华

新手上路

积分
36
金钱
36
注册时间
2022-11-29
在线时间
9 小时
 楼主| 发表于 2023-2-21 15:34:12 | 显示全部楼层
我把内部逻辑(组合逻辑)中的一个wire当作内部时钟信号了,因为这个信号存在着毛刺,所以影响了正常的功能,但在仿真中不会体现,在实际上板验证会出现错误
回复

使用道具 举报

3

主题

8

帖子

0

精华

新手上路

积分
36
金钱
36
注册时间
2022-11-29
在线时间
9 小时
 楼主| 发表于 2023-2-21 15:39:25 | 显示全部楼层
这分别是仿真和ILA的图片
屏幕截图 2023-02-21 153618.jpg
屏幕截图 2023-02-21 153601.jpg
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2023-2-22 23:31:46 | 显示全部楼层
帮顶
回复

使用道具 举报

3

主题

2013

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
5617
金钱
5617
注册时间
2018-10-21
在线时间
1591 小时
发表于 2023-2-23 09:14:11 | 显示全部楼层
可以把代码,和波形的信号名截全一些
回复

使用道具 举报

3

主题

8

帖子

0

精华

新手上路

积分
36
金钱
36
注册时间
2022-11-29
在线时间
9 小时
 楼主| 发表于 2023-2-27 10:44:23 | 显示全部楼层
QinQZ 发表于 2023-2-23 09:14
可以把代码,和波形的信号名截全一些

代码在这儿
module  serial_rec
(
input   wire        sys_clk     ,
input   wire        rst_n       ,
input   wire        SDATA       ,

output  reg         out_flag    ,
output  reg  [11:0] data_rec    ,
output  reg         CS
);
reg     [8:0]cnt_125k   ;
wire        sample_flag ;
wire        sclk        ;
reg        aclk        ;
(* keep = "true" *)reg     [3:0]   cnt     ;
reg     out_flag_reg    ;
reg     sample_flag_pre ;
reg     [4:0]cnt_2m     ;
reg     [2:0]cnt_aclk   ;

always@(posedge sys_clk or  negedge rst_n)
    begin
        if(!rst_n)
            cnt_aclk<=3'd0;
        else if(cnt_aclk==3'd4)
            cnt_aclk<=3'd0;
        else
            cnt_aclk<=cnt_aclk+1'b1;
    end

always@(posedge sys_clk or  negedge rst_n)
    begin
        if(!rst_n)
            aclk<=1'b0;
        else if(cnt_aclk==3'd4)
            aclk<=1'b1;
        else
            aclk<=1'b0;
    end

always@(posedge sys_clk or  negedge rst_n)
    begin
        if(!rst_n)
            cnt_125k<=9'd0;
        else if(cnt_125k==9'd399)
            cnt_125k<=9'd0;
        else
            cnt_125k<=cnt_125k+1'b1;
    end
assign  sample_flag=(cnt_125k>199)?1'b1:1'b0;

always@(posedge sys_clk or  negedge rst_n)
    begin
        if(!rst_n)
            cnt_2m<=5'd0;
        else if(cnt_2m==5'd24)
            cnt_2m<=5'd0;
        else
            cnt_2m<=cnt_2m+1'b1;
    end
assign  sclk=(cnt_2m>5'd12)?1'b1:1'b0;


always@(negedge sclk or negedge rst_n)      //cnt
    begin
        if(!rst_n)
            cnt<=4'd0;
        else if(cnt==4'd14)
            cnt<=4'd0;
        else if(CS==1'b0)
            cnt<=cnt+1'b1;
    end

always@(negedge sclk or negedge rst_n)      //data_rec
    begin
        if(!rst_n)
            data_rec<=12'd0;
        else case(cnt)
            4'd2 :data_rec[11]<=SDATA;
            4'd3 :data_rec[10]<=SDATA;
            4'd4 :data_rec[9]<=SDATA;
            4'd5 :data_rec[8]<=SDATA;
            4'd6 :data_rec[7]<=SDATA;
            4'd7 :data_rec[6]<=SDATA;
            4'd8 :data_rec[5]<=SDATA;
            4'd9 :data_rec[4]<=SDATA;
            4'd10:data_rec[3]<=SDATA;
            4'd11:data_rec[2]<=SDATA;
            4'd12:data_rec[1]<=SDATA;
            4'd13:data_rec[0]<=SDATA;
            default:;
        endcase
    end

always@(negedge sclk or negedge rst_n)      //打一拍
    begin
        if(!rst_n)
            out_flag_reg<=1'b0;
        else if(cnt==4'd13)
            out_flag_reg<=1'b1;
        else
            out_flag_reg<=1'b0;
    end

always@(negedge sclk or negedge rst_n)
    begin
        if(!rst_n)
            out_flag<=1'b0;
        else
            out_flag<=out_flag_reg;
    end

always@(posedge aclk or negedge rst_n)      //采样上升沿检测
    begin
        if(!rst_n)
            sample_flag_pre<=1'b0;
        else
            sample_flag_pre<=sample_flag;
    end
always@(posedge aclk or negedge rst_n)      //  CS
    begin
        if(!rst_n)
            CS<=1'b1;
        else if(sample_flag&(~sample_flag_pre))
            CS<=1'b0;
        else if(cnt==4'd14)
            CS<=1'b1;
        else
            CS<=CS;
    end

ila_0  ila_0_inst(

ILA波形

ILA波形

仿真波形

仿真波形
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-23 03:41

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表