[USF-XSim-62] ‘elaborate‘ step failed with errors.[Vivado 12-4473] Detected error while running sim

[USF-XSim-62] ‘elaborate’ step failed with error(s). Please check the Tcl console output .and

[Vivado 12-4473] Detected error while running simulation. Please correct the issue and retry this operation.

出现的问题如下:
在这里插入图片描述
翻译出来:[USF-XSim-62] 'elaborate’步骤失败,出现错误。请检查Tcl控制台输出或’D:/vivado/fortest/fortest.sim/sim_1/behav/xsim/ elaboration .log’文件以获取更多信息。
[Vivado 12-4473] 运行模拟时检测到错误请纠正此问题并重试此操作。

查找问题的方法

方法一:在Vivado 中的Messages无法看到详细信息,但是在报错的后面,会显示日志的路径,打开D:/vivado/fortest/fortest.sim/sim_1/behav/xsim/ elaboration .log,我们可以看到ERROR: [VRFC 10-3180] cannot find port ‘extreme_result’ on this module ,修改错误
在这里插入图片描述
方法二:在Vivado 中的log窗口直接看到详细信息,找到错误,然后修改。
在这里插入图片描述
我的错误是仿真文件中,例化的功能文件端口名错误。

8位的两个数比较大小

module extreme_8bit(
    extreme0,
    extreme1,
    DataSign,
    SubType,
    extreme_Result    
    );
 
input [7:0]          extreme0;//参加最值比较的向量操作数1
input [7:0]          extreme1;//参加最值比较的向量操作数2
input                DataSign;//0:无符号;  1:有符号
input                SubType;//0:寻找最大值max;1:寻找最小值min
output  reg [7:0]   extreme_Result;//最终的结果   
reg                 extreme_c_carry;
wire                carry;
wire [7:0]          extreme_sum;
wire [7:0]          temp_extreme0,temp_extreme1;//寻找最值时,无符号最高位相同时,虚拟构建的两个数 
reg  [7:0]          add_extreme0,add_extreme1;//进入加法器的进行相减运算的操作数
reg  [7:0]          min,max;
assign temp_extreme0={1'b1,extreme0[6:0]};
assign temp_extreme1={1'b0,extreme1[6:0]};    


always @(*)begin
extreme_c_carry = 1'b1;
    if(DataSign==0)begin//0:无符号
    {add_extreme0,add_extreme1} = {temp_extreme0,~temp_extreme1};
        if(SubType==0)begin//0:寻找最大值max,即 无符号向量同宽整数归约最大
            if(extreme0[7]!=extreme1[7]) begin //确定输入的数据最高位不一致 
                if(extreme0[7]==1) begin//extreme0>extreme1
                    max <= extreme0;
					extreme_Result <= max;
				end 
				else begin //extreme0[7]==0;extreme1[7]==1;extreme0<extreme1
					max <= extreme1;
					extreme_Result <= max;
				end 
            end
            else begin//extreme0[7]==extreme1[7]输入的数据最高位相同,去除最高位做差
                if(extreme_sum[7]==1)begin//extreme0>extreme1,相减时,最高位没有发生借位,最高位构建的1任然是1
				    max <= extreme0;
				    extreme_Result <= max;							
				end 
				else begin//extreme_sum[7]==0,extreme0<extreme1,,相减时,最高位发生了借位,构建的1变为了0
				    max <= extreme1;
				    extreme_Result <= max;	
				end
            end
        end
        else begin//SubType==1,1:寻找最小值min,即 有无符号向量同宽整数归约最小 
            if(extreme0[7]!=extreme1[7]) begin //确定输入的数据最高位不一致 
                if(extreme0[7]==1) begin//extreme0>extreme1 
					min <= extreme1;
					extreme_Result <= min;
				end 
				else begin //extreme0[7]==0;extreme1[7]==1;extreme0<extreme1
                    min <= extreme0;
					extreme_Result <= min;
				end 
            end
            else begin//extreme0[7]==extreme1[7]输入的数据最高位相同,去除最高位做差
                if(extreme_sum[7]==1)begin//extreme0>extreme1,相减时,最高位没有发生借位,最高位构建的1任然是1
				    min <= extreme1;
					extreme_Result <= min;							
				end 
				else begin//extreme_sum[7]==0,extreme0<extreme1,,相减时,最高位发生了借位,构建的1变为了0
				    min <= extreme0;
					extreme_Result <= min;
				end
            end
        end    
    end

    else begin//DataSign==1,1:有符号
    {add_extreme0,add_extreme1} = {extreme0,~extreme1};
        if(SubType==0)begin//0:寻找最大值max,即 有符号向量同宽整数归约最大
            if(extreme0[7]!=extreme1[7])begin//异号的两个数,最高位不一致情况下判断谁为整数最大                    
                if(extreme0[7]==1) begin//extreme0是负数
					max <= extreme1;
					extreme_Result <= max;
				end 
				else begin //extreme1是负数
					max <= extreme0;
					extreme_Result <= max;
				end                                          
            end
            else begin//同号(同正或者同负)的两个数,最高位一致情况下判断谁为整数最大
                if(extreme_sum[7]==1)begin//extreme0<extreme1,相减结果为负
				    max <= extreme1;
				    extreme_Result <= max;							
				end 
				else begin//extreme_sum[7]==0,extreme0>extreme1,相减结果为正
				    max <= extreme0;
				    extreme_Result <= max;	
				end
            end
        end
        else begin//SubType==1,1:寻找最小值min,即 有符号向量同宽整数归约最小      
            if(extreme0[7]!=extreme1[7])begin//异号的两个数,最高位不一致情况下判断谁为整数最小                    
                if(extreme0[7]==1) begin//extreme0是负数
					min <= extreme0;
					extreme_Result <= min;
				end 
				else begin //extreme1是负数
					min <= extreme1;
					extreme_Result <= min;
				end                                          
            end
            else begin//同号(同正或者同负)的两个数,最高位一致情况下判断谁为整数最小  
                if(extreme_sum[7]==1)begin//extreme0<extreme1,相减结果为负
				    min <= extreme0;
				    extreme_Result <= min;							
				end 
				else begin//extreme_sum[7]==0,extreme0>extreme1,相减结果为正
				    min <= extreme0;
				    extreme_Result <= min;	
				end
            end        
        end    
    end    
end    
    
RISCV_8BIT_REDADD extreme(
    .o_sum(extreme_sum),
    .o_cout(carry),
    .i_a(add_extreme0),
    .i_b(add_extreme1),
    .i_cin(extreme_c_carry)
);   
                             
endmodule

多位宽划分成8位的数比较大小

module extreme_8bit_256( 
    extreme0,
    extreme1,
    DataSign,
    SubType,
    extreme_temp,
    extreme_result256    
    );
parameter M = 16; //VLEN = 256 ; 
parameter N = 8; //SEW = 8 ;  
 
input    [M-1:0]            extreme0;//参加最值比较的向量操作数1
input    [M-1:0]            extreme1;//参加最值比较的向量操作数2
input    [1:0]              DataSign;//x0:无符号;  x1:有符号
input    [2:0]              SubType;//0:寻找最大值max;1:寻找最小值min
output   [M-1:0]            extreme_temp;
output   [N-1:0]            extreme_result256;//最终的结果   

extreme_8bit extreme_8bit_inst0(
    .extreme0(extreme0[N-1:0]),
    .extreme1(extreme1[N-1:0]),
    .DataSign(DataSign[0]),
    .SubType(DataSign[0]),
    .extreme_Result(extreme_temp[N-1:0])   
    );   
    
    genvar i;
    generate 
    for(i = 0;i < 1;i = i + 1)begin
    extreme_8bit extreme_8bit_inst(
    .extreme0(extreme_temp[i*N+N-1:i*N]),
    .extreme1(extreme1[(i+1)*N+N-1:(i+1)*N]),
    .DataSign(DataSign[0]),
    .SubType(SubType[0]),
    .extreme_Result(extreme_temp[(i+1)*N+N-1:(i+1)*N])
    );
    
    assign extreme_result256[N-1:0] = extreme_temp[M-1:M-N];
    end
    
endgenerate 

endmodule

仿真文件(之前文件报错,是因为例化extreme_8bit_256模块的时候,端口extreme_result256错误写成extreme_result,所有显示没有找到端口extreme_result)

module fortest_tb(    );
parameter M = 16; //VLEN = 256 ; 
parameter N = 8; //SEW = 8 ;  
   
    reg    [M-1:0]         extreme0;
    reg    [M-1:0]         extreme1;
    reg    [1:0]           DataSign;//0:无符号;  1:有符号
    reg    [2:0]           SubType;//0:寻找最大值max;1:寻找最小值min  
    wire   [M-1:0]         extreme_temp;
    wire   [N-1:0]         extreme_result;   

    extreme_8bit_256 extreme_8bit_256_inst( 
    .extreme0(extreme0),
    .extreme1(extreme1),
    .DataSign(DataSign),
    .SubType(SubType),
    .extreme_temp(extreme_temp),
    .extreme_result256(extreme_result)    
    );

   initial  begin//DataSign;//x0:无符号;  x1:有符号  SubType;//xx0:max;  xx1:min
   extreme0 = 16'b0;
   extreme1 = 16'b0;
   DataSign = 2'b00;
   SubType = 3'b000;
   #100
   SubType = 3'b000;
   extreme0 =  16'b1010_0001_0001_0111;
   extreme1 =  16'b0100_0111_1010_0001;
   #100
   SubType = 3'b001;
   extreme0 =  16'b1010_0001_0001_0111;
   extreme1 =  16'b0100_0111_1010_0001;
   #100
   DataSign = 2'b01;
   SubType = 3'b000;
   extreme0 =  16'b1010_0001_0001_0111;
   extreme1 =  16'b0100_0111_1010_0001;
   #100
   SubType = 3'b001;
   extreme0 =  16'b1010_0001_0001_0111;
   extreme1 =  16'b0100_0111_1010_0001;
   end       
endmodule
  • 8
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: "elaborate" 步骤是指在设计过程中对设计进行详细的分析和说明,以确保设计的正确性和完整性。在这个步骤中,设计人员会对设计进行更深入的思考和分析,以确定设计的各个方面是否符合要求,并进行必要的修改和调整。这个步骤通常是设计流程中非常重要的一步,可以帮助设计人员在设计过程中发现并解决潜在的问题,从而提高设计的质量和可靠性。 ### 回答2: 在Vivado设计中,'elaborate'是一个非常重要的步骤。当我们完成RTL代码的编写之后,需要在Vivado中对其进行综合和实现以生成bitstream文件,这时候就需要进行‘elaborate’步骤。 'elaborate'在Vivado中的具体作用是什么呢?总的来说,它就是将我们编写的HDL代码转化为Verilog或VHDL的模型。为了更加具体地说明'elaborate'的作用,我们可以将其分为以下几个子步骤: 1. 静态分析。在这一步中,Vivado会对所编写的HDL代码进行语法检查和分析。如果发现有语法错误或不规范的写法,它会给出相应的警告和错误提示,以便我们及时进行修改。 2. 分层次综合。这一步是将所编写的HDL代码综合成逻辑门级的模型,通常称为网表。在这个过程中,Vivado会根据我们所设定的综合选项,进行适当的优化,以生成更加高效的电路模型。 3. 抽象级别转换。Vivado会将综合得到的网表模型转换为RTL级别的描述。这对于我们后面进行排布布局、时序分析等步骤是非常有帮助的。 4. 格式转化。最后一步是将RTL描述转换为Verilog或VHDL语言的模型,以便后面进行仿真或介入到其他的工具链中。 总的来说,'elaborate'步骤的作用是将我们编写的HDL代码转化为各种电路模型,包括网表、RTL等,并进行相应的优化和转换。这个步骤并不会影响到我们的设计本身,但是对于后面的综合、布局和仿真等步骤是非常重要的。 ### 回答3: Elaborate Step在工艺流程中是一个极其重要的步骤。这个步骤旨在通过一系列复杂的工艺流程将芯片的细节和内在结构完善地展现出来,以确保芯片的可靠性和性能。这个步骤通常和先进的成像技术一起使用。下面简要介绍一下这个步骤的过程: 1. 光刻:在芯片表面应用一层光刻胶,并使用特殊光刻机将图案刻入光刻胶层。这些图案将修饰芯片表面的未来结构。 2. 介电层(Di-electric Layer)制备:介质层是芯片内部的一种保护层,可以保证芯片在高温和其他极端环境下不受损害。将介质涂在整个晶圆表面,并使用热硬化技术将其烘烤。这种聚合物材料可以在热处理过程中形成非常坚硬的结构,从而保护芯片。 3. 金属化层:在介电层之上的薄膜层。该层主要用于芯片之间或芯片内部的互连和电子信号传输。这一层通常由铜或铝制成。 4. 玻璃盖层(Passivation layer):这一层涂在芯片表面,以保护芯片内部的元器件免受外界环境(如湿度和氧化)的影响。它通常是由二氧化硅和氮化硅制成的。 通过这些复杂的工艺流程,精密的芯片结构和纤细的芯片线路得以得到完美地演绎和显露。Elaborate Step在芯片制造工艺中扮演着关键的角色,它的一举一动都会影响芯片的可靠性和性能。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值