cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
Highlighted
Newbie
Newbie
293 Views
Registered: ‎07-07-2019

Synthesis error

Hi, i have a problem. This is my code: 

`timescale 1ns / 1ps

module Winda(rzad_pietro,in_obecne_pietro,clk,reset,complete,kierunek,over_czas,over_waga,waga_alarm,dzwi_alarm,out_obecne_pietro);

//wejscia pin
//------------------
input [7:0]rzad_pietro; // 8-bit 
input [7:0]in_obecne_pietro;
input clk;
input reset;
input over_czas;
input over_waga;

//wyjscia pin
//--------------------
output kierunek;
output complete;
output dzwi_alarm;
output waga_alarm;
output [7:0]out_obecne_pietro;



//===========================



//parametry rejestru
//------------------------
reg r_kierunek; // 1-bit polaczony z wyjsciem "kierunek"
reg r_complete; // 1-bit polaczony z wyjsciem "complete"
reg r_dzwi_alarm; // 1-bit polaczony z wyjsciem "dzwi_alarm"
reg r_waga_alarm; // 1-bit polaczony z wyjsciem "waga_alarm"
reg [7:0] r_out_obecne_pietro; // 8-bit polaczony z wyjsciem "out_obecne_pietro"

//rejestr generatora zegara
//----------------------------
reg [12:0] clk_licz;
reg clk_200;
reg clk_odpal;

//polaczenie pinow i rejestrow
assign kierunek=r_kierunek;
assign complete=r_complete;
assign dzwi_alarm=r_dzwi_alarm;
assign waga_alarm=r_waga_alarm;
assign out_obecne_pietro=r_out_obecne_pietro;



//===============================


//----------------------------
 //inicjalizacja
 //----------------------------
 always @ (negedge reset) begin
 
 clk_200=1'b0;
 clk_licz=0;
 clk_odpal=1'b0;
 
 //zresetuj rejestry 
 //------------------------------
 r_complete=1'b0;
 r_dzwi_alarm=1'b0;
 r_waga_alarm=1'b0;
 
 end
 
 //generowanie zegara
 //-----------------------------
 
 always @ (posedge clk) begin
 if(clk_odpal) begin
 clk_licz=clk_licz+1;
 end
 if(clk_licz==5000)begin
 clk_200=~clk_200;
 clk_licz=0;
 end
 end
 
 //===================
 
 //rzadanie piętra
 //----------------------
 always @ (rzad_pietro) begin
 clk_odpal=1;
 clk_200=~clk_200;
 
 r_out_obecne_pietro <= in_obecne_pietro;
 //przypisz wartosc wejscia do rejestru
 end
 
 
 
 //==============================
 
//-----------------------------
//przypadki w pracy windy
//-----------------------------
always @(posedge clk) begin
if(!reset && !over_czas && !over_waga)begin

//przypadek [1]
//--------------------------

if(rzad_pietro > r_out_obecne_pietro)begin
r_kierunek=1'b1;
r_out_obecne_pietro <= r_out_obecne_pietro<<1;
end

else if (rzad_pietro < r_out_obecne_pietro)begin
r_kierunek=1'b0;
r_out_obecne_pietro=r_out_obecne_pietro>>1;
end

else if(rzad_pietro==r_out_obecne_pietro)begin
r_complete=1;
r_kierunek=0;
end
end

//przypadek [2] :dzwi otworzone wiecej niz 3min
//----------------------------------------------
else if (!reset && over_czas)begin
r_dzwi_alarm=1;
r_complete=1;
r_waga_alarm=0;
r_out_obecne_pietro <= r_out_obecne_pietro;
end

//przypadek [3]: calkowita waga jest wieksza od limitu
else if(!reset && over_waga)begin
r_dzwi_alarm=0;
r_waga_alarm=1;
r_complete=1;
r_kierunek=0;
r_out_obecne_pietro <= r_out_obecne_pietro;
end
end

endmodule

and synthesis shows errors like on screenshot

Adnotacja 2019-07-07 100050.png
0 Kudos
1 Reply
Highlighted
Scholar
Scholar
272 Views
Registered: ‎08-01-2012

r_out_obecne_pietro Is driven in two different always blocks. You can only drive it in one always block.