Форум программистов, компьютерный форум, киберфорум
Программируемая логика: ПЛИС, ПАИС
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
0 / 0 / 0
Регистрация: 22.10.2017
Сообщений: 30
1

Проект параллельного регистра

25.04.2019, 16:15. Просмотров 1322. Ответов 3

Проект скомпилирован в среде разработки Quartus II по книге В.В. Амосова "Схемотехника и средства проектирования цифровых устройств" (стр. 359). Не могу решить ряд ошибок:
Error (10122): Verilog HDL Event Control error at MainRegister.v(54): mixed single- and double-edge expressions are not supported
Error: Can't elaborate top-level user hierarchy
Error: Quartus II Analysis & Synthesis was unsuccessful. 2 errors, 3 warnings
Error: Quartus II Full Compilation was unsuccessful. 4 errors, 3 warnings

В чём может быть проблема?

Код
// Модуль D-триггер
module DTrigger(Result, Data, Clock, Reset, Ewr);
//определение параметров входных и выходных
	input Data, Clock, Reset, Ewr; //входные данные,синхроимпульс, сброс, сигнал управления хранением-записью
	output Result; //выход триггера
	reg Res, Buf; // регистровые переменные
	
// Меняем состояние D-триггера, если меняется одни из сигналов
always @(negedge Clock or Reset or Ewr)
	begin
	if(Reset) Res = 0; // Если RESET==0, то устанавливаем в ноль регистр Res, иначе
	else begin 
// елси Ewr == 0, запись данных в регистр со входа Data
// и в регистр Buf для временного хранения и перезаписи:
			if(!Ewr)
				begin
					Res = Data;
					Buf = Data;
				end
// если Ewr == 1, то храним и перезаписываем из регистра Buf
			else Res = Buf;
		end
	end 
// подаём на выход триггера содержимое регистровой переменной
	assign Result = !Res;
endmodule

module MainRegister(OUTRESULT, EWR, CLOCK, RESET, DATA, EDY);
// обявдение параметра:
	parameter numbits=7; // Разрядность портов
	// Объявление входов и выходов;
	// многоразрядных:
	input [numbits:0] DATA; //данные
	// одноразрядных:
	input EWR, CLOCK, RESET, EDY; //хранение-запись, синхронизация, сброс, разрешение чтения с выходом
	// выходных:
	output [numbits:0] OUTRESULT;
	// регистровых:
	reg [numbits:0] res;
	wire [numbits:0] Res;
	
	// Вызов модулей Dtrigger:
	
	DTrigger Dtrig0(Res[0], DATA[0], CLOCK, RESET, EWR);
	DTrigger Dtrig1(Res[1], DATA[1], CLOCK, RESET, EWR);
	DTrigger Dtrig2(Res[2], DATA[2], CLOCK, RESET, EWR);
	DTrigger Dtrig3(Res[3], DATA[3], CLOCK, RESET, EWR);
	DTrigger Dtrig4(Res[4], DATA[4], CLOCK, RESET, EWR);
	DTrigger Dtrig5(Res[5], DATA[5], CLOCK, RESET, EWR);
	DTrigger Dtrig6(Res[6], DATA[6], CLOCK, RESET, EWR);
	DTrigger Dtrig7(Res[7], DATA[7], CLOCK, RESET, EWR);
	
	// если меняется одна из переменные, то
	always @(posedge CLOCK or RESET)
	begin 
	integer i;
	if (RESET) //если RESET == 1, то сброс в 0 буферного регистра
		for (i=0; i<=7; i=i+1) res[i] = 0;
	else // иначе
		begin 
		// если нет сброса в 0 и разрешён выход, то
		// читаем выход D-триггера (пишем в регистр)
			if (~EDY) res = ~Res;
			//иначе - выход заперт:
			else res = 'bx;
		end
	end
// назначем результат на выход:
	assign OUTRESULT = res;
endmodule
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.04.2019, 16:15
Ответы с готовыми решениями:

Как реализовать в LPT взаимосвязь статус регистра и регистра данных
Как реализовать в LPT взаимосвязь статус регистра и регистра данных. Чтобы при изменении сигнала...

Как записать информацию из 16 битного регистра в два регистра по 8 бит
Как записать информацию из 16 битного регистра в два регистра по 8 бит. (То есть каждый раз может...

Строки: все буквы малого регистра заменить большими, а большого регистра малыми
введенной строке все буквы малого регистра заменить большими,а большого регистра малыми

Преобразовать буквы от k до х нижнего регистра в соответствующие верхнего регистра
Написать программу, выполняющую действия со строкой символов . Для модификации символов...

3
101 / 74 / 14
Регистрация: 15.11.2012
Сообщений: 514
Завершенные тесты: 1
26.04.2019, 04:21 2
Цитата Сообщение от Sanedi Посмотреть сообщение
Error (10122): Verilog HDL Event Control error at MainRegister.v(54): mixed single- and double-edge expressions are not supported
Попробуйте строку 54 записать так:
always @(posedge CLOCK or posedge RESET)
0
0 / 0 / 0
Регистрация: 22.10.2017
Сообщений: 30
26.04.2019, 07:15  [ТС] 3
alexey6689, при исправлении этой ошибки появляются новые.
Error (10122): Verilog HDL Event Control error at MainRegister.v(9): mixed single- and double-edge expressions are not supported
Error: Can't elaborate user hierarchy "DTrigger: Dtrig0"
0
2 / 1 / 1
Регистрация: 22.10.2019
Сообщений: 1
19.05.2020, 22:01 4
Лучший ответ Сообщение было отмечено Sanedi как решение

Решение

Привет, Политеховцам! Это заводится в квартусе:

Код
module DTrigger(Result, Data, Clock, Reset, Ewr);

      input  Data, Clock, Reset, Ewr;
      output Result;
      reg Res, Buf;

      always @(Clock or Reset or Ewr)
        begin
          if (Reset)
              Res = 0;
          else
            begin
               if (!Ewr)
                begin
                  Res = Data;
                  Buf = Data;
                end
               else
                  Res = Buf;
            end
        end

       assign Result = !Res;
endmodule

module MainRegister(OUTRESULT , EWR, CLOCK, RESET, DATA , EDY);

parameter numbits=7;

       input [numbits:0] DATA;
       input EWR, CLOCK, RESET, EDY;
       output [numbits:0] OUTRESULT ;
	   integer i;
       reg [numbits:0] res;
       wire[numbits:0] Res ;

       DTrigger Dtrig1 (Res[0], DATA[0], CLOCK, RESET, EWR);
       DTrigger Dtrig2 (Res[1], DATA[1], CLOCK, RESET, EWR);
       DTrigger Dtrig3 (Res[2], DATA[2], CLOCK, RESET, EWR);
       DTrigger Dtrig4 (Res[3], DATA[3], CLOCK, RESET, EWR);
       DTrigger Dtrig5 (Res[4], DATA[4], CLOCK, RESET, EWR);
       DTrigger Dtrig6 (Res[5], DATA[5], CLOCK, RESET, EWR);
       DTrigger Dtrig7 (Res[6], DATA[6], CLOCK, RESET, EWR);
       DTrigger Dtrig8 (Res[7], DATA[7], CLOCK, RESET, EWR);

       always @ (posedge RESET or posedge CLOCK)
         begin
           if (RESET)
              for (i=0; i<=7; i=i+1)
                  res[i] = 0;
           else
             begin
                if (~EDY)
                   res = ~Res;
                else res = 'bx;
             end
         end

       assign OUTRESULT = res;
endmodule
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.05.2020, 22:01

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Выполнить перевод всех символов этой строки из верхнего регистра в нижний, а из нижнего регистра в верхний
1. Ввести множество, запись или строку с помощью клавиатуры. 2. Вывести на экран монитора исходную...

Выборка данных из регистра сведений и регистра остатков
Нужно написать отчет по з.п, продавцы получают з.п в зависимости от того сколько они продали, т.е...

Написать функцию которая в строке заменяет все символы верхнего регистра в символы нижнего регистра
Здравствуйте. помогите написать программу. Написать функцию которая в строке заменяет все символы...

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.