Я пытаюсь реализовать отображение кода Морзе на моей FPGA.Я написал много кода, но получаю одно и то же сообщение об ошибке.Прежде чем я углублюсь в это, пожалуйста, взгляните на задание.Чтобы было ясно, я не прошу, чтобы кто-то сделал задание для меня.Мне просто нужна помощь в отладке моего кода.
"Часть IV В этой части упражнения вы должны реализовать кодировщик азбуки Морзе с использованием автомата. Код Морзе использует шаблоны коротких и длинных импульсов для представления сообщения.Каждая буква представлена в виде последовательности точек (короткий импульс) и тире (длинный импульс). Например, первые восемь букв алфавита имеют следующее представление:
A • -
B - • • •
C - • - •
D - • •
E •
F • • - •
G - - *
H • • • •
Разработайте и внедрите схему кодера Морзе с использованием FSM. Ваша схема должна принимать в качестве входа одну из первых восьмибуквы алфавита и отображают код Морзе для него на красном светодиоде.Используйте переключатели SW2−0 и кнопки KEY1−0 в качестве входов. Когда пользователь нажимает KEY1, схема должна отображать код Морзе для буквы, указанной SW2−0(000 для A, 001 для B,и т. д.), используя 0,5-секундные импульсы для представления точек и 1,5-секундные импульсы для представления штрихов.Кнопка KEY0 должна работать как асинхронный сброс.
Вот код, который я написал:
module part4 (SELECT, button, CLOCK_50, RESET, led);
input [2:0]SELECT;
input RESET, button, CLOCK_50;
output reg led=0;
reg [26:0] COUNT=0; //register that keeps track of count
reg [1:0] COUNT2=0; //keeps track of half seconds
reg halfsecflag=0; //goes high every time half second passes
reg dashflag=0; // goes high every time 1 and half second passes
reg [3:0] code; //1 is dot and 0 is dash. There are 4 total
reg [1:0] c3=2'b00; //keeps track of the index we are on in the code.
reg [2:0] STATE; //register to keep track of states in the state machine
wire done=0; //a flag that goes up when one morse pulse is done.
reg ending=0; //another flag that goes up when a whole morse letter has
flashed
reg [1:0] length; //This is the length of the morse letter. It varies from 1
to 4
wire i; // if i is 1, then the state machine goes to "dot". if 0 "dash"
assign i = code[c3];
assign done= (halfsecflag)&&(~ending)&&~led;
parameter START= 3'b000, DOT= 3'b001, DASH= 3'b010, DELAY= 3'b011, IDLE=
3'b100;
parameter A= 3'b000, B=3'b001, C=3'b010, D=3'b011, E=3'b100, F=3'b101,
G=3'b110, H=3'b111;
always @(posedge CLOCK_50 or posedge RESET) //making counter
begin
if (RESET == 1)
COUNT <= 0;
else if (COUNT==25'd25000000)
begin
COUNT <= 0;
halfsecflag <= 1;
end
else
begin
COUNT <= COUNT+1;
halfsecflag <=0;
end
end
always @(posedge CLOCK_50 or posedge RESET)
begin
if (RESET == 1)
begin
COUNT2 <= 2'd00;
dashflag<=1'b0;
end
else if ((COUNT2==2)&&(halfsecflag))
begin
COUNT2 <= 2'd0;
dashflag<=1'b1;
end
else if ((halfsecflag)&&(COUNT2!=2))
begin
COUNT2<= COUNT2+2'd1;
dashflag<=1'b0;
end
end
always @(posedge button or RESET) //asynchronous reset
begin
STATE<=IDLE;
end
always@(*) begin //State machine
case (STATE)
START: begin
led <= 1;
if (i) STATE <= DOT;
else STATE <= DASH;
end
DOT: begin
if (halfsecflag && ~ending) STATE <= DELAY;
else if (ending) STATE<= IDLE;
else STATE<=DOT;
end
DASH: begin
if ((dashflag)&& (~ending))
STATE <= DELAY;
else if (ending)
STATE <= IDLE;
else STATE <= DASH;
end
DELAY: begin
led <= 0;
if ((halfsecflag)&&(ending))
STATE<=IDLE;
else if ((halfsecflag)&&(~ending))
STATE<=START;
else STATE <= DELAY;
end
IDLE: begin
c3<=2'b00;
if (button) STATE<=START;
STATE<=IDLE;
end
default: STATE <= IDLE;
endcase
end
always @(posedge button)
begin
case (SELECT)
A: length<=2'b01;
B: length<=2'b11;
C: length<=2'b11;
D: length<=2'b10;
E: length<=2'b00;
F: length<=2'b11;
G: length<=2'b10;
H: length<=2'b11;
default: length<=2'bxx;
endcase
end
always @(posedge button)
begin
case (SELECT)
A: code<= 4'b0001;
B: code<= 4'b1110;
C: code<= 4'b1010;
D: code<= 4'b0110;
E: code<= 4'b0001;
F: code<= 4'b1011;
G: code<= 4'b0100;
H: code<= 4'b1111;
default: code<=4'bxxxx;
endcase
end
always @(*)
begin
if (c3==length)
begin
c3=2'b00; ending<=1;
end
else if (done)
c3= c3+2'b01;
end
endmodule
Код ошибки, который я продолжаю получать: Ошибка (10028): Не удается разрешить кратную константудрайверы для сети "c3 [1]" в part4.v (68)
Также зеленым над этим кодом ошибки, это говорит о выводе защелки несколько раз.Это не кажется хорошим!Можете ли вы взглянуть на мой код и посмотреть, сможете ли вы выяснить, почему я получаю это сообщение об ошибке?
Обновление: это не дубликат моего предыдущего вопроса.Раньше я просил советы о том, как создать задержку с помощью verilog.В этом вопросе я просил помочь отладить мой код.Сообщение об ошибке, которое я получил, не имело смысла для меня.Я посмотрел другие ответы на обмен стека относительно этого кода ошибки, но ни один из них не имел смысла для меня.