МАРСОХОД

Open Source Hardware Project

Добро пожаловать, Гость
Логин: Пароль: Запомнить меня

ТЕМА: Вопросы по языку Verilog

Re: Вопросы по языку Verilog 6 года 10 мес. назад #1340

Ясно, ну применительно к моему коду я могу тыкать везде неблокирующий, по идее, надо только о порядке расположения команд думать.

зы: У меня не стоит цели синтезировать реальное ЦУ, просто курсовой проект. Дело в том, что я планирую и дальше заниматься этим делом и хочется как можно раньше разобраться именно описанием схемы на HDL.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Re: Вопросы по языку Verilog 6 года 10 мес. назад #1354

Каким образом можно задать условие в:
localparam	t1 = 500,
		t2 = 200,
		
		t4 = 200,
		t5 = 1000,
		t6 = 200;

	if (mode = 1)
		localparam t3 = 100000;
	else
		localparam t3 = 1000000;
Спасибо.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

"Холодает" - подумал Волк и натянул Красную Шапочку по самые уши...
Последнее редактирование: от Серый Волк.

Re: Вопросы по языку Verilog 6 года 9 мес. назад #1355

Как-то так:
parameter mode = 1;
parameter t3 = mode==1 ? 100000 : 1000000;

Серый Волк пишет: Каким образом можно задать условие в:

localparam	t1 = 500,
		t2 = 200,
		
		t4 = 200,
		t5 = 1000,
		t6 = 200;

	if (mode = 1)
		localparam t3 = 100000;
	else
		localparam t3 = 1000000;
Спасибо.

Спасибо сказали: Серый Волк

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Re: Вопросы по языку Verilog 6 года 9 мес. назад #1356

Это всё замечательно если бы не то что mode - это входной пин устройства :(

ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]

Error (10192): Verilog HDL Defparam Statement error at block_form.v(21): value for parameter "t3" must be constant expression

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

"Холодает" - подумал Волк и натянул Красную Шапочку по самые уши...

Re: Вопросы по языку Verilog 6 года 9 мес. назад #1357

а где в вашем коде написано что t3 регистр или выходной пин ?
вы его определили как константу !

вот и получили ошибку присваивания

определите t3 как reg что ли...

а к моде вроде как у компилятора претензий пока нет B)
Спасибо сказали: Серый Волк

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Последнее редактирование: от ВитГо.

Re: Вопросы по языку Verilog 6 года 9 мес. назад #1358

А конфликта не будет?
t3 - это ведь параметр, а reg - это уже переменная.
Они вроде разные по сути.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

"Холодает" - подумал Волк и натянул Красную Шапочку по самые уши...

Re: Вопросы по языку Verilog 6 года 9 мес. назад #1359

конфликт у вас сейчас - потому что вы константе пытаетесь присвоить значение по условию

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Re: Вопросы по языку Verilog 6 года 9 мес. назад #1360

Согласен - это безрассудно :)

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

"Холодает" - подумал Волк и натянул Красную Шапочку по самые уши...

Re: Вопросы по языку Verilog 6 года 9 мес. назад #1387

Доброе время суток.
Пробема такова: в результате симуляции работы устройства счетчик не кончается на 400 а идет до конца (511 т.к. 9битн). Там дальше, по условию, должен был увеличиться счетчик отвечающий за j на единицу (а-ля цикл в цикле)

Иллюстрация clip2net.com/s/2DB7q

Из-за чего это?

Прилагаю файл целиком но работа этого участка описана в блоке под комментарием // 1 //
Заранее спасибо

mdss.v
что-то не прикрепляется тут файл

narod.ru/disk/64751836001.dbf0c157987967...447f5859/mdss.v.html

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Последнее редактирование: от qvrock.

Re: Вопросы по языку Verilog 6 года 9 мес. назад #1388

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

в вашем случае у вас срабатывает первое условие
// if it's 0 of 9 (first) 400-iteration cycle? -> write data in ram1
	if (j == 0) 
	begin
		ram1 [i] <= datain;
		i <= i + 1;
	end
	// if not -> accumulate data in ram1
	else ..... тут остальной код

и поскольку j=0 (по симуляции это видно) то i будет просто инкрементироваться..
до остальных вариантов процесс не доходит (они же в else)

возможно что вам первое условие нужно более полно определить, как то так:
// if it's 0 of 9 (first) 400-iteration cycle? -> write data in ram1
	if ((j == 0) && (i<400)) 
	begin
		ram1 [i] <= datain;
		i <= i + 1;
	end
	// if not -> accumulate data in ram1
	else ..... тут остальной код

тогда при i>=400 вы попадете в else

но у вас второе условие фактически (при j=0) повторяет первое
else if ((i<400) && (j<10))
	begin 
		ram1 [i] <= ram1 [i] + datain;
		i <= i + 1;
	end
а вот код на исполнение чуть отличается...

нужно еще раз пересмотреть алгоритм! чтобы более четко выбирать код по условию

что-то типа
if (j<10)
begin 
    if (i<400) 
    begin
       if (j=0) ram1 [i] <= datain; else ram1 [i] <= ram1 [i] + datain;
       i <= i + 1;
    end else 
    begin // здесь i>=400
        j <= j + 1;
        i <= 0;
    end
end else // здесь j>=10
begin
    j <= 0;
    i <= 0;
end

в среде не проверял, но думаю идея понятна...

p.s. хотя все равно это решение имхо не совсем то к чему бы я стремился...
Спасибо сказали: qvrock

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Последнее редактирование: от ВитГо.
Время создания страницы: 0.233 секунд

ВКонтакте  facebook  GitHub  YouTube  Twitter