2015-02-18 2 views
0

Здравствуйте, я хочу, чтобы это сделатьVHDL-переключатели Правильный код

GDF File Image (кликабельным)

И я написал этот код, это правильно? Поскольку мой компилятор на MAX + PLUS II не показывают какую-либо ошибку ...

LIBRARY IEEE; 
USE IEE.STD_LOGIC_1164.ALL; 

ENTITY alarm IS PORT 
(ON/OFF,MOTION_SENSOR,.LIGHT_SENSOR,.SOUND_SENSOR,.CAMERA_SENSOR,.IP_SENSOR,.TEMPERATURE_SENSOR: IN STD_LOGIC; 
SENSOR_SIRINE,SENSOR_LIGHT:OUT STD_LOGIC); 
END alarm; 

ARCHITECTURE LEITOURGEIA OF alarm IS 
BEGIN 
if (ON/OFF='1' AND (MOTION_SENSOR='1' OR LIGHT_SENSOR='1' OR SOUND_SENSOR='1' OR CAMERA_SENSOR='1' OR IP_SENSOR='1' OR TEMPERATURE_SENSOR='1')) then 
SENSOR_LIGHT<='1'; 
SENSOR_SIRINE<='1'; 

ELSE IF (ON/OFF='0' AND (MOTION_SENSOR='1' OR LIGHT_SENSOR='1' OR SOUND_SENSOR='1' OR CAMERA_SENSOR='1' OR IP_SENSOR='1' OR TEMPERATURE_SENSOR='1')) then 
SENSOR_LIGHT<='1'; 
SENSOR_SIRINE<='0'; 

ELSE 
SENSOR_LIGHT<='0'; 
SENSOR_SIRINE<='0'; 

END IF 

END LEITOURGEIA; 
+0

вы недостающая точку с запятой после 'конца if'. ON/OFF не является юридическим идентификатором в VHDL, а также идентификаторы, начинающиеся с периодов. Оператор if не является параллельным выражением. – user1155120

+0

не означает юридический идентификатор? on/off - вход –

+2

Чувак, это не VHDL. – user1155120

ответ

1

Это приближение того, что ваш код будет выглядеть следующим действительным VHDL:

library ieee; 
use ieee.std_logic_1164.all; 

entity alarm is 
    port (
     on_off, motion_sensor, light_sensor, 
     sound_sensor, camera_sensor, ip_sensor, 
     temperature_sensor:   in std_logic; 
     sensor_sirine, sensor_light: out std_logic 
    ); 
end alarm; 

architecture leitourgeia of alarm is 
begin 
unlabelled: 
    process (on_off, motion_sensor, light_sensor, sound_sensor, 
      camera_sensor, ip_sensor, temperature_sensor) 
    begin 
     if on_off = '1' and 
      (motion_sensor = '1' or light_sensor = '1' or sound_sensor = '1' or 
      camera_sensor = '1' or ip_sensor = '1' or temperature_sensor='1') then 
      sensor_light <= '1'; 
      sensor_sirine <= '1'; 
     elsif on_off = '0' and 
      (motion_sensor = '1' or light_sensor = '1' or sound_sensor = '1' or 
      camera_sensor = '1' or ip_sensor = '1' or temperature_sensor = '1') then 
      sensor_light <= '1'; 
      sensor_sirine <= '0'; 
     else 
      sensor_light <= '0'; 
      sensor_sirine <= '0'; 
     end if; 
    end process; 
end leitourgeia; 

Я отступом его, фиксированная некоторые орфографические ошибки, сделали действительные идентификаторы, поместили оператор if в процесс и сделали else ifelsif, а также избавились от двух наборов лишних круглых скобок.

В настоящее время он анализирует, разрабатывает и моделирует.

И так делает эту архитектуру:

architecture foo of alarm is 
    signal alarm_light: std_logic; 
begin 
    alarm_light <= motion_sensor or sound_sensor or light_sensor or 
        camera_sensor or ip_sensor or temperature_sensor; 

    sensor_light <= alarm_light; 

    sensor_sirine <= '1' when alarm_light = '1' and on_off = '1' else 
        '0'; 
end architecture foo; 

Что более близко напоминает ссылочный схематическое изображение.

И это одна еще более близко напоминает ссылочную схему:

architecture fum of alarm is 
    signal alarm_light: std_logic; 
begin 
    alarm_light <= motion_sensor or sound_sensor or light_sensor or 
        camera_sensor or ip_sensor or temperature_sensor; 

    sensor_light <= alarm_light; 

    sensor_sirine <= on_off and alarm_light; 
end architecture fum; 
+0

Большое спасибо –

+0

- это проблема с именами входов, выходов и утверждений (if, elseif) в верхнем регистре? –

+0

Нет, это не проблема, регулярные идентификаторы и зарезервированные слова нечувствительны к регистру; – user1155120

Смежные вопросы