개인적으로 경험한 Vivado 오류 요약
6705 단어 FPGA
개요
개인적으로 발생한 오류와 해결된 결과를 나열했습니다.
여러 always 문
module Register(
input [3:0] in,
output reg [3:0] out,
input CLK,
input Reset
);
always @(posedge CLK)
begin
out <= in;
end
always @ (posedge Reset)
begin
out <= 4'h0;
end
endmodule
[DRC MDRV-1] Multiple Driver Nets:
Net Register1/out[0] has multiple drivers:
Register1/out_reg[0]__0/Q, and Register1/out_reg[0]/Q.
리셋을 별도로 기술 한 결과, 4bitRegister를 만들려고했지만 Register가 2set (8bit) 생성되어 버렸다.
그런 다음 두 개의 레지스터 출력이 직접 연결되어 멀티 드라이버 오류가 발생합니다.
always 문을 하나로 정리하면 해결되었습니다.
orderd port and named port
[Synth 8-2543] port connections cannot be mixed ordered and named
multiplexer multi1(.in1(switch[3:0]),in2(switch[7:4]), .out(out), .select(in[0]));
따라서 모듈을 연결할 때 발생했습니다.
원인
in2(switch[7:4])
에서 $.$를 붙여 잊어 버렸기 때문에 발생했습니다.
다중 비트 라인 연결
module GAWA(
input [3:0] in,
output [3:0] out,
input [2:0] BTN,
input [7:0] switch
);
multiplexer multi1(.in1(switch[3:0]),.in2(switch[7:4]), .out(out), .select(in[0]));
endmodule
module multiplexer(
input [3:0] in1,
input [3:0] in2,
output[3:0] out,
input select
);
function [3:0] Select;
input select;
input in1;
input in2;
begin
if(select == 1)
Select = in1;
else
Select = in2;
end
endfunction
assign out = Select(select,in1,in2);
endmodule
보기 흉한 코드이지만. . .
결과
0bit째 이후는 GND가 되어 버리고 있다. 실제로 FPGA에 도입해도 마찬가지입니다.
원인
function [3:0] Select;
input select;
input in1;
input in2;
begin
if(select == 1)
Select = in1;
else
Select = in2;
end
endfunction
여기서 input in1, in2의 비트 크기를 지정하지 않았습니다. 지정하지 않으면 1 비트가됩니다.
결과적으로 사용하는 모듈에서 이상합니다.
이것은 오류를 토하지 않는 것에 놀랐습니다.
수정했을 때 치료했다.
생각한 행동을 하지 않는다
비트 파일의 선택을 다른 것으로 만들었기 때문에 계속 변경되지 않았습니다.
이것은 너무 바보입니다.
디멀티플렉서 생성 방법
function 문, case로 만들었습니다.
[3 : 0] 선택 정보를 사용하여 CLK를 [15 : 0] OUT 중 어느 것에 연결할지 선택할 수 있습니다.
module DeMultiplexer(
input CLK,
input [3:0] Select,
output [15:0] Out
);
function [15:0]out;
input [3:0]Select;
input in;
case(Select)
4'h0:out[0] = in;
4'h1:out[1] = in;
4'h2:out[2] = in;
4'h3:out[3] = in;
4'h4:out[4] = in;
4'h5:out[5] = in;
4'h6:out[6] = in;
4'h7:out[7] = in;
4'h8:out[8] = in;
4'h9:out[9] = in;
default : out = 16'h0000;
endcase
endfunction
assign Out = out(Select,CLK);
endmodule
module GAWA(
input clock,
input [3:0]SW,
output [3:0]LED
);
reg [26:0] D;
always @ (posedge clock)
begin
D <= D+1;
end
wire [15:0]Out;
DeMultiplexer DeMultiplexer(.CLK(D[26]), .Out(Out),.Select(SW));
assign LED[0] = Out[0];
assign LED[1] = Out[1];
assign LED[2] = Out[2];
assign LED[3] = D[26];
endmodule
이제 실행하면. 확실히 Select를 선택하면 출력을 선택할 수있었습니다.
그러나 LED는 Out [0] ~ [2]까지만 지정했지만 Select-> LED의 대응은
0->0
1->1
2->2
3->2
4->0
5->1
6->2
7->2
8->OFF
9 이후 OFF
Select가 3~7의 동작이 이상하다
원인
case(Select)
4'h0:out[0] = in;
4'h1:out[1] = in;
4'h2:out[2] = in;
4'h3:out[3] = in;
4'h4:out[4] = in;
4'h5:out[5] = in;
4'h6:out[6] = in;
4'h7:out[7] = in;
4'h8:out[8] = in;
4'h9:out[9] = in;
default : out = 16'h0000;
endcase
case문으로 out의 1bit만의 동작을 지정하고 있기 때문이 아닌가?
module DeMultiplexer(
input CLK,
input [3:0] Select,
output [15:0] Out
);
function [15:0]out;
input [3:0]Select;
input in;
case(Select)
4'h0:begin
out[0] = in;
out[15:1] = 0;
end
4'h1:begin
out[0] = 0;
out[1] = in;
out[15:2] = 0;
end
4'h2:begin
out[1:0] = 0;
out[2] = in;
out[15:3] = 0;
end
4'h3:begin
out[2:0] = 0;
out[3] = in;
out[15:4] = 0;
end
4'h4:begin
out[3:0] = 0;
out[4] = in;
out[15:5] = 0;
end
4'h5:begin
out[4] = 0;
out[5] = in;
out[15:6] = 0;
end
4'h6:begin
out[5] = 0;
out[6] = in;
out[15:7] = 0;
end
4'h7:begin
out[6] = 0;
out[7] = in;
out[15:8] = 0;
end
4'h8:begin
out[7] = 0;
out[8] = in;
out[15:9] = 0;
end
4'h9:begin
out[8] = 0;
out[9] = in;
out[15:10] = 0;
end
default : out = 16'h0000;
endcase
endfunction
assign Out = out(Select,CLK);
endmodule
다른 비트도 제대로 지정했는데 문제없이 동작했다.
그러나 더 좋은 글이 있다고 생각하기 때문에 누군가를 말해주십시오.
if 문의 논리 곱
if(a>5 and b>2)
오류가 발생합니다.
if(a>5 && b>2)
에서 지나갑니다.
Reference
이 문제에 관하여(개인적으로 경험한 Vivado 오류 요약), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/hiRina/items/00454fc6ad88e3e8edf1
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
module Register(
input [3:0] in,
output reg [3:0] out,
input CLK,
input Reset
);
always @(posedge CLK)
begin
out <= in;
end
always @ (posedge Reset)
begin
out <= 4'h0;
end
endmodule
[DRC MDRV-1] Multiple Driver Nets:
Net Register1/out[0] has multiple drivers:
Register1/out_reg[0]__0/Q, and Register1/out_reg[0]/Q.
리셋을 별도로 기술 한 결과, 4bitRegister를 만들려고했지만 Register가 2set (8bit) 생성되어 버렸다.
그런 다음 두 개의 레지스터 출력이 직접 연결되어 멀티 드라이버 오류가 발생합니다.
always 문을 하나로 정리하면 해결되었습니다.
orderd port and named port
[Synth 8-2543] port connections cannot be mixed ordered and named
multiplexer multi1(.in1(switch[3:0]),in2(switch[7:4]), .out(out), .select(in[0]));
따라서 모듈을 연결할 때 발생했습니다.
원인
in2(switch[7:4])
에서 $.$를 붙여 잊어 버렸기 때문에 발생했습니다.
다중 비트 라인 연결
module GAWA(
input [3:0] in,
output [3:0] out,
input [2:0] BTN,
input [7:0] switch
);
multiplexer multi1(.in1(switch[3:0]),.in2(switch[7:4]), .out(out), .select(in[0]));
endmodule
module multiplexer(
input [3:0] in1,
input [3:0] in2,
output[3:0] out,
input select
);
function [3:0] Select;
input select;
input in1;
input in2;
begin
if(select == 1)
Select = in1;
else
Select = in2;
end
endfunction
assign out = Select(select,in1,in2);
endmodule
보기 흉한 코드이지만. . .
결과
0bit째 이후는 GND가 되어 버리고 있다. 실제로 FPGA에 도입해도 마찬가지입니다.
원인
function [3:0] Select;
input select;
input in1;
input in2;
begin
if(select == 1)
Select = in1;
else
Select = in2;
end
endfunction
여기서 input in1, in2의 비트 크기를 지정하지 않았습니다. 지정하지 않으면 1 비트가됩니다.
결과적으로 사용하는 모듈에서 이상합니다.
이것은 오류를 토하지 않는 것에 놀랐습니다.
수정했을 때 치료했다.
생각한 행동을 하지 않는다
비트 파일의 선택을 다른 것으로 만들었기 때문에 계속 변경되지 않았습니다.
이것은 너무 바보입니다.
디멀티플렉서 생성 방법
function 문, case로 만들었습니다.
[3 : 0] 선택 정보를 사용하여 CLK를 [15 : 0] OUT 중 어느 것에 연결할지 선택할 수 있습니다.
module DeMultiplexer(
input CLK,
input [3:0] Select,
output [15:0] Out
);
function [15:0]out;
input [3:0]Select;
input in;
case(Select)
4'h0:out[0] = in;
4'h1:out[1] = in;
4'h2:out[2] = in;
4'h3:out[3] = in;
4'h4:out[4] = in;
4'h5:out[5] = in;
4'h6:out[6] = in;
4'h7:out[7] = in;
4'h8:out[8] = in;
4'h9:out[9] = in;
default : out = 16'h0000;
endcase
endfunction
assign Out = out(Select,CLK);
endmodule
module GAWA(
input clock,
input [3:0]SW,
output [3:0]LED
);
reg [26:0] D;
always @ (posedge clock)
begin
D <= D+1;
end
wire [15:0]Out;
DeMultiplexer DeMultiplexer(.CLK(D[26]), .Out(Out),.Select(SW));
assign LED[0] = Out[0];
assign LED[1] = Out[1];
assign LED[2] = Out[2];
assign LED[3] = D[26];
endmodule
이제 실행하면. 확실히 Select를 선택하면 출력을 선택할 수있었습니다.
그러나 LED는 Out [0] ~ [2]까지만 지정했지만 Select-> LED의 대응은
0->0
1->1
2->2
3->2
4->0
5->1
6->2
7->2
8->OFF
9 이후 OFF
Select가 3~7의 동작이 이상하다
원인
case(Select)
4'h0:out[0] = in;
4'h1:out[1] = in;
4'h2:out[2] = in;
4'h3:out[3] = in;
4'h4:out[4] = in;
4'h5:out[5] = in;
4'h6:out[6] = in;
4'h7:out[7] = in;
4'h8:out[8] = in;
4'h9:out[9] = in;
default : out = 16'h0000;
endcase
case문으로 out의 1bit만의 동작을 지정하고 있기 때문이 아닌가?
module DeMultiplexer(
input CLK,
input [3:0] Select,
output [15:0] Out
);
function [15:0]out;
input [3:0]Select;
input in;
case(Select)
4'h0:begin
out[0] = in;
out[15:1] = 0;
end
4'h1:begin
out[0] = 0;
out[1] = in;
out[15:2] = 0;
end
4'h2:begin
out[1:0] = 0;
out[2] = in;
out[15:3] = 0;
end
4'h3:begin
out[2:0] = 0;
out[3] = in;
out[15:4] = 0;
end
4'h4:begin
out[3:0] = 0;
out[4] = in;
out[15:5] = 0;
end
4'h5:begin
out[4] = 0;
out[5] = in;
out[15:6] = 0;
end
4'h6:begin
out[5] = 0;
out[6] = in;
out[15:7] = 0;
end
4'h7:begin
out[6] = 0;
out[7] = in;
out[15:8] = 0;
end
4'h8:begin
out[7] = 0;
out[8] = in;
out[15:9] = 0;
end
4'h9:begin
out[8] = 0;
out[9] = in;
out[15:10] = 0;
end
default : out = 16'h0000;
endcase
endfunction
assign Out = out(Select,CLK);
endmodule
다른 비트도 제대로 지정했는데 문제없이 동작했다.
그러나 더 좋은 글이 있다고 생각하기 때문에 누군가를 말해주십시오.
if 문의 논리 곱
if(a>5 and b>2)
오류가 발생합니다.
if(a>5 && b>2)
에서 지나갑니다.
Reference
이 문제에 관하여(개인적으로 경험한 Vivado 오류 요약), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/hiRina/items/00454fc6ad88e3e8edf1
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
[Synth 8-2543] port connections cannot be mixed ordered and named
multiplexer multi1(.in1(switch[3:0]),in2(switch[7:4]), .out(out), .select(in[0]));
in2(switch[7:4])
module GAWA(
input [3:0] in,
output [3:0] out,
input [2:0] BTN,
input [7:0] switch
);
multiplexer multi1(.in1(switch[3:0]),.in2(switch[7:4]), .out(out), .select(in[0]));
endmodule
module multiplexer(
input [3:0] in1,
input [3:0] in2,
output[3:0] out,
input select
);
function [3:0] Select;
input select;
input in1;
input in2;
begin
if(select == 1)
Select = in1;
else
Select = in2;
end
endfunction
assign out = Select(select,in1,in2);
endmodule
보기 흉한 코드이지만. . .
결과
0bit째 이후는 GND가 되어 버리고 있다. 실제로 FPGA에 도입해도 마찬가지입니다.
원인
function [3:0] Select;
input select;
input in1;
input in2;
begin
if(select == 1)
Select = in1;
else
Select = in2;
end
endfunction
여기서 input in1, in2의 비트 크기를 지정하지 않았습니다. 지정하지 않으면 1 비트가됩니다.
결과적으로 사용하는 모듈에서 이상합니다.
이것은 오류를 토하지 않는 것에 놀랐습니다.
수정했을 때 치료했다.
생각한 행동을 하지 않는다
비트 파일의 선택을 다른 것으로 만들었기 때문에 계속 변경되지 않았습니다.
이것은 너무 바보입니다.
디멀티플렉서 생성 방법
function 문, case로 만들었습니다.
[3 : 0] 선택 정보를 사용하여 CLK를 [15 : 0] OUT 중 어느 것에 연결할지 선택할 수 있습니다.
module DeMultiplexer(
input CLK,
input [3:0] Select,
output [15:0] Out
);
function [15:0]out;
input [3:0]Select;
input in;
case(Select)
4'h0:out[0] = in;
4'h1:out[1] = in;
4'h2:out[2] = in;
4'h3:out[3] = in;
4'h4:out[4] = in;
4'h5:out[5] = in;
4'h6:out[6] = in;
4'h7:out[7] = in;
4'h8:out[8] = in;
4'h9:out[9] = in;
default : out = 16'h0000;
endcase
endfunction
assign Out = out(Select,CLK);
endmodule
module GAWA(
input clock,
input [3:0]SW,
output [3:0]LED
);
reg [26:0] D;
always @ (posedge clock)
begin
D <= D+1;
end
wire [15:0]Out;
DeMultiplexer DeMultiplexer(.CLK(D[26]), .Out(Out),.Select(SW));
assign LED[0] = Out[0];
assign LED[1] = Out[1];
assign LED[2] = Out[2];
assign LED[3] = D[26];
endmodule
이제 실행하면. 확실히 Select를 선택하면 출력을 선택할 수있었습니다.
그러나 LED는 Out [0] ~ [2]까지만 지정했지만 Select-> LED의 대응은
0->0
1->1
2->2
3->2
4->0
5->1
6->2
7->2
8->OFF
9 이후 OFF
Select가 3~7의 동작이 이상하다
원인
case(Select)
4'h0:out[0] = in;
4'h1:out[1] = in;
4'h2:out[2] = in;
4'h3:out[3] = in;
4'h4:out[4] = in;
4'h5:out[5] = in;
4'h6:out[6] = in;
4'h7:out[7] = in;
4'h8:out[8] = in;
4'h9:out[9] = in;
default : out = 16'h0000;
endcase
case문으로 out의 1bit만의 동작을 지정하고 있기 때문이 아닌가?
module DeMultiplexer(
input CLK,
input [3:0] Select,
output [15:0] Out
);
function [15:0]out;
input [3:0]Select;
input in;
case(Select)
4'h0:begin
out[0] = in;
out[15:1] = 0;
end
4'h1:begin
out[0] = 0;
out[1] = in;
out[15:2] = 0;
end
4'h2:begin
out[1:0] = 0;
out[2] = in;
out[15:3] = 0;
end
4'h3:begin
out[2:0] = 0;
out[3] = in;
out[15:4] = 0;
end
4'h4:begin
out[3:0] = 0;
out[4] = in;
out[15:5] = 0;
end
4'h5:begin
out[4] = 0;
out[5] = in;
out[15:6] = 0;
end
4'h6:begin
out[5] = 0;
out[6] = in;
out[15:7] = 0;
end
4'h7:begin
out[6] = 0;
out[7] = in;
out[15:8] = 0;
end
4'h8:begin
out[7] = 0;
out[8] = in;
out[15:9] = 0;
end
4'h9:begin
out[8] = 0;
out[9] = in;
out[15:10] = 0;
end
default : out = 16'h0000;
endcase
endfunction
assign Out = out(Select,CLK);
endmodule
다른 비트도 제대로 지정했는데 문제없이 동작했다.
그러나 더 좋은 글이 있다고 생각하기 때문에 누군가를 말해주십시오.
if 문의 논리 곱
if(a>5 and b>2)
오류가 발생합니다.
if(a>5 && b>2)
에서 지나갑니다.
Reference
이 문제에 관하여(개인적으로 경험한 Vivado 오류 요약), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/hiRina/items/00454fc6ad88e3e8edf1
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
function 문, case로 만들었습니다.
[3 : 0] 선택 정보를 사용하여 CLK를 [15 : 0] OUT 중 어느 것에 연결할지 선택할 수 있습니다.
module DeMultiplexer(
input CLK,
input [3:0] Select,
output [15:0] Out
);
function [15:0]out;
input [3:0]Select;
input in;
case(Select)
4'h0:out[0] = in;
4'h1:out[1] = in;
4'h2:out[2] = in;
4'h3:out[3] = in;
4'h4:out[4] = in;
4'h5:out[5] = in;
4'h6:out[6] = in;
4'h7:out[7] = in;
4'h8:out[8] = in;
4'h9:out[9] = in;
default : out = 16'h0000;
endcase
endfunction
assign Out = out(Select,CLK);
endmodule
module GAWA(
input clock,
input [3:0]SW,
output [3:0]LED
);
reg [26:0] D;
always @ (posedge clock)
begin
D <= D+1;
end
wire [15:0]Out;
DeMultiplexer DeMultiplexer(.CLK(D[26]), .Out(Out),.Select(SW));
assign LED[0] = Out[0];
assign LED[1] = Out[1];
assign LED[2] = Out[2];
assign LED[3] = D[26];
endmodule
이제 실행하면. 확실히 Select를 선택하면 출력을 선택할 수있었습니다.
그러나 LED는 Out [0] ~ [2]까지만 지정했지만 Select-> LED의 대응은
0->0
1->1
2->2
3->2
4->0
5->1
6->2
7->2
8->OFF
9 이후 OFF
Select가 3~7의 동작이 이상하다
원인
case(Select)
4'h0:out[0] = in;
4'h1:out[1] = in;
4'h2:out[2] = in;
4'h3:out[3] = in;
4'h4:out[4] = in;
4'h5:out[5] = in;
4'h6:out[6] = in;
4'h7:out[7] = in;
4'h8:out[8] = in;
4'h9:out[9] = in;
default : out = 16'h0000;
endcase
case문으로 out의 1bit만의 동작을 지정하고 있기 때문이 아닌가?
module DeMultiplexer(
input CLK,
input [3:0] Select,
output [15:0] Out
);
function [15:0]out;
input [3:0]Select;
input in;
case(Select)
4'h0:begin
out[0] = in;
out[15:1] = 0;
end
4'h1:begin
out[0] = 0;
out[1] = in;
out[15:2] = 0;
end
4'h2:begin
out[1:0] = 0;
out[2] = in;
out[15:3] = 0;
end
4'h3:begin
out[2:0] = 0;
out[3] = in;
out[15:4] = 0;
end
4'h4:begin
out[3:0] = 0;
out[4] = in;
out[15:5] = 0;
end
4'h5:begin
out[4] = 0;
out[5] = in;
out[15:6] = 0;
end
4'h6:begin
out[5] = 0;
out[6] = in;
out[15:7] = 0;
end
4'h7:begin
out[6] = 0;
out[7] = in;
out[15:8] = 0;
end
4'h8:begin
out[7] = 0;
out[8] = in;
out[15:9] = 0;
end
4'h9:begin
out[8] = 0;
out[9] = in;
out[15:10] = 0;
end
default : out = 16'h0000;
endcase
endfunction
assign Out = out(Select,CLK);
endmodule
다른 비트도 제대로 지정했는데 문제없이 동작했다.
그러나 더 좋은 글이 있다고 생각하기 때문에 누군가를 말해주십시오.
if 문의 논리 곱
if(a>5 and b>2)
오류가 발생합니다.
if(a>5 && b>2)
에서 지나갑니다.
Reference
이 문제에 관하여(개인적으로 경험한 Vivado 오류 요약), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/hiRina/items/00454fc6ad88e3e8edf1
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
if(a>5 and b>2)
if(a>5 && b>2)
Reference
이 문제에 관하여(개인적으로 경험한 Vivado 오류 요약), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/hiRina/items/00454fc6ad88e3e8edf1텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)