OpenEdv-开源电子网

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

[XILINX] 关于VIVADO综合时内部寄存器被优化的问题

[复制链接]

3

主题

8

帖子

0

精华

新手上路

积分
36
金钱
36
注册时间
2022-11-29
在线时间
9 小时
发表于 2023-2-20 08:27:29 | 显示全部楼层 |阅读模式
2金钱
做了一个串行数据接收模块,将串行数据变成12位输出,但是综合后里面的计数器被优化掉了,输出全部接地,求大佬帮忙这种怎么解决

下面是我的代码


module  serial_rec
(
input   wire        sys_clk     ,
input   wire        rst_n       ,
input   wire        SDATA       ,
input   wire        sample_flag ,

output  reg         out_flag    ,
output  reg  [11:0] data_rec    ,
output  reg         CS
);

wire        sclk        ;
wire        aclk        ;
reg     [3:0]   cnt     ;
reg     out_flag_reg    ;
reg     sample_flag_pre ;
reg     [4:0]cnt_2m     ;
  pll_ip pll_ip_inst
   (
    // Clock out ports
    .clk_out1(sclk),     // output clk_out1
    // Status and control signals
    .reset(!rst_n), // input reset

   // Clock in ports
    .clk_in1(sys_clk));      // input clk_in1

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


endmodule


最佳答案

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

添加放优化的语句试试呢,如果还是被优化,一般就是该信号对输出结果没有任何影响
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

1979

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
5520
金钱
5520
注册时间
2018-10-21
在线时间
1561 小时
发表于 2023-2-20 08:27:30 | 显示全部楼层
添加放优化的语句试试呢,如果还是被优化,一般就是该信号对输出结果没有任何影响
回复

使用道具 举报

3

主题

8

帖子

0

精华

新手上路

积分
36
金钱
36
注册时间
2022-11-29
在线时间
9 小时
 楼主| 发表于 2023-2-20 09:56:22 | 显示全部楼层
QinQZ 发表于 2023-2-20 09:20
添加放优化的语句试试呢,如果还是被优化,一般就是该信号对输出结果没有任何影响

好的好的  谢谢   解决了  
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-10-4 04:21

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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