ERROR 总结

通用

  1. 虽然各部分都是并行运行,但变量的声明要放在它首次出现的程序前面。

Quartus

  1. 分析综合是看语法逻辑,全编译是看能否在fpga上实现。比如逻辑用了5M的片上RAM,综合没问题,但是fpga上只有几K,编译就会报错。
  2. Error (10028): Can’t resolve multiple constant drivers for net “prbs15[0]” at test.v(24)
always @ (posedge clk or negedge rst_n) begin
    if(!rst_n)
		prbs15 <=15'b000_0000_0000_0001;
    else begin
     	temp <= prbs15[14]^prbs15[13];
    	for (i = 14; i >= 1; i = i - 1)
    	    begin
    	        prbs15[i] <= prbs15[i-1];
    	    end
    	out <= prbs15[14];
    end
end
always @ (temp) begin
	assign prbs15[0] = temp;
end

原因就是在两个always语句里面都对prbs15[0]赋值了,而两个always是并行的,所以提示出现多重驱动的情况。
同一个信号不允许在多个进程中赋值,否则视为多驱动。FPGA进程的并行性决定了多进程不同能对同一个对象进行赋值。

  1. Error (10219): Verilog HDL Continuous Assignment error : object “prbs15” on left-hand side of assignment must have a net type
output  reg [14:0]  prbs15;
assign	prbs15[0] = temp;

assign只能对wire变量赋值…

  1. Error (10137): Verilog HDL Procedural Assignment error: object “y” on left-hand side of assignment must have a variable data type
reg x;
wire [2:0] y;
always  @(*)begin
    if(cnt_c==0)begin
        x = 1;
        y = 1;

原因:数据类型定义错误 或者 赋值类型错误
解决方法: 在always 过程块中被赋值的变量必须是 reg (寄存器型),用 assign 连续赋值的对象 必须定义成 wire(线型)

  1. 虽然都是并行的,但是一个变量也得先定义,才能被使用。倒过来不行
reg [2:0] cnt;
wire add_cnt;
wire end_cnt;

reg flag;
reg [2:0] cnt_c;
always  @(posedge clk or negedge rst_n)begin
    if(rst_n==1'b0)begin
        cnt <= 0;
    end
    else if(add_cnt) begin
        if(end_cnt)
            cnt <= 0;
        else
            cnt <= cnt + 1;
    end
end
assign  add_cnt = flag==1'b1;
assign  end_cnt = add_cnt &&cnt== cnt_c +1'b1;

flag, cnt_c都是后面always中才产生的变量,如果想和前面的语句产生交互(被使用),必须放在前面定义。否则报错:Undefined variable: ‘cnt_c’.

VIVADO

  1. [Synth 8-91] ambiguous clock in event control
    always敏感变量没有得到使用,比如rst信号
    always@(posedge clk or negedge rst_n) begin
        case(cnt)
        3'd0: q_reg=seq[5];
        3'd1: q_reg=seq[4] ;            
        3'd2: q_reg=seq[3] ;            
        3'd3: q_reg=seq[2] ;            
        3'd4: q_reg=seq[1] ;       
        3'd5: q_reg=seq[0] ;   
        default: ;  //不执行
        endcase
    end
  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值