7 Treffer gefunden
|
Suchdauer: 0,03 Sekunden
|
|
Betreff |
Autor |
Datum |
|
Linear Feedback Shit Register
Ich möchte ein 4bit LFSR aufbauen mit meine DATA als Eingang aufbauen. Nur leider kann ich nicht meinem Eingang XOR in das LFSR verbinden. Es kommt immer folgende Fehlermeldung:
ERROR:HDLParsers:808 - D:/Studium/VHLD-Project/decoder.vhd Line 35. xor can not have such operands in this context.
Kann jemand mir sagen was ich falsch mache? Ich habe den Eingang als bit und das LFSR ist als bit_vector und wenn ich nur ein bit nehme, sollte doch beides gleich sein?
Hier mein Code
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
use IEEE.std_logic_1164.all;
entity decoder is
Port ( header_flag : out std_logic;
message_flag : out std_logic;
checksum_flag : out std_logic;
data : in std_logic;
reset : in std_logic;
clk : in std_logic);
end decoder;
architecture Behavioral of decoder is
signal LFSR : bit_vector(3 downto 0);
signal R : bit_vector(3 downto 0);
signal temp: std_logic;
begin
process(clk, reset)
variable feedback: bit;
variable temp: bit;
begin
if reset = '1' then
header_flag <= '0';
message_flag <= '0';
checksum_flag <= '0';
LFSR <= "1111";
elsif rising_edge(clk) then
feedback := LFSR(3) xor LFSR(0);
LFSR(0) <= feedback xor data ; --hier soll der Fehler sein
LFSR(1) <= LFSR(0);
LFSR(2) <= LFSR(1);
LFSR(3) <= LFSR(2);
end if;
end process;
end Behavioral;
|
Marc10k |
08.12.04, 20:11 |
|
Re: Mehrere Prozesse mit gleichen Signalen
Du kannst immer nur in EINEM Process ein Signal ändern, sonst gibt es diese Fehlermeldung. Das Programm musst du so umschreiben das es nur in einem Process geändert wird. Gelesen kann es aber dann in mehreren Processen.
Marcus
|
Marc10k |
08.12.04, 20:02 |
|
Fehlermeldung 605
Ich bekommen folgende Fehlermeldung wenn ich mein Programm übersetzte:
ERROR:NgdBuild:605 - logical root block 'g_clock' with type 'g_clock' is
Kennt jemand diese Fehlermeldung und weiss wie ich sie beheben kann?
Gruss
Marcus
[i]
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity g_clock is
Port ( reset : in std_logic;
clk : in std_logic);
end g_clock;
architecture Behavioral of g_clock is
signal counter : std_logic ;
begin
reseting : process (reset, clk)
begin
if reset = '1' then
counter <= '1';
elsif (clk'event and clk = '1') then
counter <= '0';
end if;
end process;
end Behavioral;
[/i]
|
Marc10k |
08.11.04, 23:25 |
|
Re: VHDL Schieberegister
Meine Vorfreude war vielleicht etwas zu früh. Den Fehler habe ich nicht mehr aber es werden leider auch meine Daten nicht mit der Clock übertragen. Ich den Code abgeändert und versucht die Daten im Takt der Clock zu übertragen. Nur leider klappt es nicht so wie ich mir das so vorstelle. Vielleicht kann jemand mir helfen.
Hier mein jetzige Code:
[i]
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
-- Header 7 bits 0010010
-- Data 1 24 bits 264744 - 0010.0110.0100.0111.0100.0100
-- Data 2 24 bits 199408 - 0001.1001.1001.0100.0000.1000
-- Checksum 4 bits
entity Sender is
Port ( Reset : in std_logic;
Run : in std_logic;
Mode : in std_logic_vector(1 downto 0);
clock : in std_logic;
Data : out std_logic);
end Sender;
architecture Behavioral of Sender is
begin
process (Mode, Run, clock)
variable shift_reg_h: std_logic_vector(6 downto 0);
variable shift_reg_d: std_logic_vector(23 downto 0);
variable shift_reg_c: std_logic_vector(3 downto 0);
variable M : integer;
begin
if (clock'event and clock = '1') then
if Run = '1' then
case Mode is
when "00" => -- good header, data segment 1 and checksum
-- send the header first
shift_reg_h := "0010010";
for I in 0 to 6 loop
shift_reg_h (6 downto 1) := shift_reg_h (5 downto 0);
if (clock'event and clock = '0') then
Data <= shift_reg_h (6);
end if;
end loop;
-- send the datasegment next
shift_reg_d := "001001100100011101000100"; --Marcus number
for I in 0 to 23 loop
shift_reg_d (23 downto 1) := shift_reg_d (22 downto 0);
Data <= shift_reg_d (23);
end loop;
-- send the checksum last
when "01" => -- good header, data segment 2 and checksum
-- send the header first
shift_reg_h := "0010010";
for I in 0 to 6 loop
shift_reg_h (6 downto 1) := shift_reg_h (5 downto 0);
Data <= shift_reg_h (6);
end loop;
-- send the datasegment last
shift_reg_d := "000110011001010000001000"; -- Johns number
for I in 0 to 23 loop
shift_reg_d (23 downto 1) := shift_reg_d (22 downto 0);
Data <= shift_reg_d (23);
end loop;
-- send the checksum last
when "10" => -- invalid header, data segment 1, checksum
-- send the invalid header first
shift_reg_h := "0000000"; -- INVALID HEADER
for I in 0 to 6 loop
shift_reg_h (6 downto 1) := shift_reg_h (5 downto 0);
Data <= shift_reg_h (6);
end loop;
-- send the datasegment last
shift_reg_d := "001001100100011101000100"; --Marcus number
for I in 0 to 23 loop
shift_reg_d (23 downto 1) := shift_reg_d (22 downto 0);
Data <= shift_reg_d (23);
end loop;
-- send the checksum last
when "11" => -- good header, datasegment 2, invalid checksum
-- send the header first
shift_reg_h := "0010010";
for I in 0 to 6 loop
shift_reg_h (6 downto 1) := shift_reg_h (5 downto 0);
Data <= shift_reg_h (6);
end loop;
-- send the datasegment next
shift_reg_d := "000110011001010000001000"; -- Johns number
for I in 0 to 23 loop
shift_reg_d (23 downto 1) := shift_reg_d (22 downto 0);
Data <= shift_reg_d (23);
end loop;
-- send the checksum last (INVALID)
when others =>
Data <= 'X';
end case;
end if;
end if;
end process;
end Behavioral;
[/i]
Anbei auch noch mal der Code als vhd Datei.
|
Marc10k |
03.11.04, 17:37 |
|
Einstellungen sepichern
Ich habe mein Project im Xilinx Project Navigator geschrieben und auch eine Testbench erstellt. Wenn ich nun auf "Simulate Behavioral Model" klicke öffnet sich ModelSim XE/Starter 5.8c und zeigt mir nun die Waveform und weiteres an.
Wenn ich nun etwas in meiner Testbench ändere und es erneut simulieren will öffnet sich ein neues ModelSim und alle meine geänderten Sachen wie z.B. Namen in Waveview und Größe sind nicht mehr vorhanden. Wie kann ich dem Programm klar machen das es meine alten Einstellungen nehmen soll?
Gruss Marcus
|
Marc10k |
03.11.04, 17:32 |
|
Re: VHDL Schieberegister
Vielen Dank es klappt. :)
Gruss
Marcus
|
Marc10k |
02.11.04, 14:26 |
|
VHDL Schieberegister
Mein VHLD Programm soll 35 bit (jetzt aber erstmal 7) seriell übertragen nach dem die Run-Taste und der Modus abgefragt wurde. Ich wollte erst die beiden Eingänge abfragen und dann mit jedem Clockzyklus ein bit übertragen. Es werden später beim Sender und Empfänger die gleiche Clock benutzt. Bei ansteigender Flanke werden die Daten geschrieben und bei fallender dann gelesen. Damit das ganze statisch bleibt.
Ich habe schon folgendes geschrieben:
[i]
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity Sender is
Port ( Reset : in std_logic;
Run : in std_logic;
Mode : in std_logic_vector(1 downto 0);
clock : in std_logic;
Data : out std_logic);
end Sender;
architecture Behavioral of Sender is
begin
process (Mode, Run, clock)
variable shift_reg: std_logic_vector(6 downto 0):= "1111111";
begin
if Run = '1' then
case Mode is
when "00" => -- good header, data segment 1 and checksum
Data <= '1';
for I in 0 to 6 loop
shift_reg := "0010010";
if (clock'event and clock = '1') then
shift_reg(6 downto 1) := shift_reg (5 downto 0);
Data <= shift_reg(6);
end if;
end loop;
when "01" => -- good header, data segment 2 and checksum
Data <= '1';
when "10" => -- invalid header, data segment 1, checksum
Data <= '1';
when "11" => -- good header, datasegment 2, invalid checksum
Data <= '1';
when others =>
Data <= 'X';
end case;
end if;
end process;
end Behavioral;
[/i]
Nur leider bekommen ich immer folgende Fehlermeldung:
Signal Data cannot be synthesized, bad synchronous description.
Kennt jemand Abhilfe?
Gruss
Marcus
|
Marc10k |
02.11.04, 12:38 |
|
|
|
7 von 7 Ergebnisse
|
Anfang
zurück
weiter
Ende
|
powered by carookee.com - eigenes profi-forum kostenlos
Design © trevorj
|