OpenEdv-开源电子网

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

[ALTERA] 向数组内赋值,赋值不进去

[复制链接]

1

主题

4

帖子

0

精华

新手入门

积分
12
金钱
12
注册时间
2020-2-16
在线时间
4 小时
发表于 2020-4-26 23:39:12 | 显示全部楼层 |阅读模式
1金钱
各位老师好:我在学习新起点FPGA时,学到uart通信时,教程讲的是,将电脑通过串口发送下去的数据,直接在回传回来,我想在中间做一个缓存,例如,电脑通过串口下发一组数据,FPGA收到后,将数据先缓存到
数组内,数组内的每个元素做+1处理,得出的结果再回传给电脑,我程序是下面这样写的。为什么在仿真时buf_data这个数组内不能赋值呢?求各位老师帮助一下,谢谢!!!

module operate(
    input                                   clk,
    input                                   rst_n,
    input   [7:0]                           oper_data_in,
    input                                   oper_flag
);
reg                                         rise0;
reg                                         rise1;
wire                                        rise;
assign rise = (~rise) & rise0;

reg [7:0]                                   buf_data[0:5];
reg [5:0]                                   buf_cnt;
reg         [7:0]                           buff;
always @(posedge clk or negedge rst_n)begin
    if(!rst_n)begin
        rise0 <= 1'b0;
        rise1 <= 1'b0;
    end
    else begin
        rise0 <= oper_flag;
        rise1 <= rise0;
    end
end

always @(posedge clk or negedge rst_n)begin
    if(!rst_n)begin
        buff <= 8'd0;
    end
    else begin
        if(rise)begin
            buff <= oper_data_in;
            
        end
        else begin
            buf_data[0] <= buff;
        end
        
    end
end
endmodule

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

2013

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
5618
金钱
5618
注册时间
2018-10-21
在线时间
1591 小时
发表于 2020-4-27 10:25:27 | 显示全部楼层
仿真还是比较方便找问题的。比如buf_data没有数据,那就去看buff有没有数据;如果buf没有数据,就看rise有没有上升沿,并且在上升沿的时候,oper_data_in的数据是不是正确等等。这样一步步找问题
回复

使用道具 举报

1

主题

4

帖子

0

精华

新手入门

积分
12
金钱
12
注册时间
2020-2-16
在线时间
4 小时
 楼主| 发表于 2020-4-27 23:55:37 | 显示全部楼层
QinQZ 发表于 2020-4-27 10:25
仿真还是比较方便找问题的。比如buf_data没有数据,那就去看buff有没有数据;如果buf没有数据,就看rise有 ...

module abc(
    input               clk,
    input               rst_n,
    output  reg [7:0]  aa,
    output  reg [7:0]   bb
   
);
reg     [7:0]   a;
reg     [7:0]   b;
reg [7:0]   cc[2:0] /*synthesis noprune*/;
reg [7:0]   dd[2:0]/*synthesis noprune*/;
always@(posedge clk or negedge rst_n)begin
    if(!rst_n)begin
        aa <= 8'd0;
        bb <= 8'd0;
        a <= 8'd0;
        b <= 8'd0;
    end
    else begin
        aa <= a + 1'b1;
        bb <= b + 1'b1;
        cc[0] <= aa;
        dd[1] <= bb;
    end
end
endmodule
我目前用的是quartus II 13.1版本,是破解,在使用signaltap IIf仿真过程中,对于reg wire
类型的变量,在仿真软件中不能正常显示,误以为程序编写有误,实际不是,不知道是因为
软件是破解版的有bug还是这是这个软件通病,上述程序,在不加 /*synthesis noprune*/这个语句时,在signaltap II仿真中是看不到数组变量值的,在增加了之后,其他代码都不变,可以正常看见数组内的数据变量值。
回复

使用道具 举报

1

主题

4

帖子

0

精华

新手入门

积分
12
金钱
12
注册时间
2020-2-16
在线时间
4 小时
 楼主| 发表于 2020-4-27 23:56:33 | 显示全部楼层
module abc(
    input               clk,
    input               rst_n,
    output  reg [7:0]  aa,
    output  reg [7:0]   bb
   
);
reg     [7:0]   a;
reg     [7:0]   b;
reg [7:0]   cc[2:0] /*synthesis noprune*/;
reg [7:0]   dd[2:0]/*synthesis noprune*/;
always@(posedge clk or negedge rst_n)begin
    if(!rst_n)begin
        aa <= 8'd0;
        bb <= 8'd0;
        a <= 8'd0;
        b <= 8'd0;
    end
    else begin
        aa <= a + 1'b1;
        bb <= b + 1'b1;
        cc[0] <= aa;
        dd[1] <= bb;
    end
end
endmodule
我目前用的是quartus II 13.1版本,是破解,在使用signaltap IIf仿真过程中,对于reg wire
类型的变量,在仿真软件中不能正常显示,误以为程序编写有误,实际不是,不知道是因为
软件是破解版的有bug还是这是这个软件通病,上述程序,在不加 /*synthesis noprune*/这个语句时,在signaltap II仿真中是看不到数组变量值的,在增加了之后,其他代码都不变,可以正常看见数组内的数据变量值。
回复

使用道具 举报

8

主题

168

帖子

0

精华

高级会员

Rank: 4

积分
557
金钱
557
注册时间
2015-7-4
在线时间
104 小时
发表于 2020-4-28 08:52:02 | 显示全部楼层
数据都存在buf_data的第0个字节处buf_data[0],后面的吧前面的覆盖了,
回复

使用道具 举报

1

主题

4

帖子

0

精华

新手入门

积分
12
金钱
12
注册时间
2020-2-16
在线时间
4 小时
 楼主| 发表于 2020-4-28 09:48:44 | 显示全部楼层
chaifuwu 发表于 2020-4-28 08:52
数据都存在buf_data的第0个字节处buf_data[0],后面的吧前面的覆盖了,

在仿真是,单次触发,不会被覆盖
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-23 17:04

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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