|
Вопросы начинающего в ПЛИС |
|
|
|
Feb 3 2010, 16:26
|
Частый гость
 
Группа: Участник
Сообщений: 103
Регистрация: 21-06-09
Пользователь №: 50 494

|
Цитата(des00 @ Feb 3 2010, 19:13)  так циклический или логический? по коду все нормально %) циклический, хочу, чтобы эта комбинация по кругу выдавалась на выход. просто при установке assign S = Q[0], квартус говорит: Pin "S" is stuck at GND, а это странно, потому что при циклическом сдвиге на этой позиции должны появляться единицы...
|
|
|
|
|
Feb 3 2010, 23:15
|
Частый гость
 
Группа: Участник
Сообщений: 103
Регистрация: 21-06-09
Пользователь №: 50 494

|
Цитата(des00 @ Feb 3 2010, 20:29)  тогда и описывайте его. вы же пишете выражение арифметического сдвига(см. стандарт на язык верилог), квартус все правильно делает. В 0 бите всегда будет 0 %) Так вроде арифметический - это <<, а циклический <<<. Разве не так?
|
|
|
|
|
Feb 4 2010, 03:49
|
Местный
  
Группа: Свой
Сообщений: 279
Регистрация: 2-07-08
Из: Новосибирск
Пользователь №: 38 699

|
<< - битовый сдвиг <<< - арифметический Код input clock; output S;
reg [6:0] Q;
initial begin Q = 7'b1111110; end
always @(posedge clock) begin Q <= {Q[5:0], Q[6]}; end
assign S = Q[6];
|
|
|
|
|
Feb 4 2010, 03:49
|
Вечный ламер
     
Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453

|
Цитата(Shaienn @ Feb 3 2010, 17:15)  Так вроде арифметический - это <<, а циклический <<<. Разве не так? не зря я вам посоветовал, учите матчасть %) IEEE Standard Verilog Hardware Description Language IEEE Std 1364-2001 -> 4.1.12 Shift operators Цитата 4.1.12 Shift operators There are two types of shift operators, the logical shift operators, << and >>, and the arithmetic shift opera- tors, <<< and >>>. The left shift operators, << and <<<, shall shift their left operand to the left by the num- ber by the number of bit positions given by the right operand. In both cases, the vacated bit positions shall be filled with zeroes. The right shift operators, >> and >>>, shall shift their left operand to the right by the num- ber of bit positions given by the right operand. The logical right shift shall fill the vacated bit positions with zeroes. The arithmetic right shift shall fill the vacated bit positions with zeroes if the result type is unsigned. It shall fill the vacated bit positions with the value of the most-significant (i.e., sign) bit of the left operand if the result type is signed. If the right operand has an unknown or high impedence value, then the result shall be unknown. The right operand is always treated as an unsigned number and has no effect on the signedness of the result. The result signedness is determined by the left-hand operand and the remainder of the expres- sion, as outlined in 4.5.1
--------------------
|
|
|
|
|
Feb 4 2010, 04:04
|
Частый гость
 
Группа: Участник
Сообщений: 103
Регистрация: 21-06-09
Пользователь №: 50 494

|
Учу-учу матчасть  Оказывается арифметический и циклический сдвиг - это одно и то же. Так вот мне и нужен циклический(арифметический) сдвиг. Который, согласно мануалу - <<<; Нужно, чтоб работало именно так: Цитата It shall fill the vacated bit positions with the value of the most-significant (i.e., sign) bit of the left operand if the result type is signed. Но непонятно, что имеется в виду под словами result type? Выполнив: Q = 7'b0000111 Q <= Q <<< 3 Хочу получить: Q == 7'b0111000....
|
|
|
|
|
Feb 4 2010, 04:10
|
Вечный ламер
     
Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453

|
Цитата(Shaienn @ Feb 3 2010, 22:04)  Оказывается арифметический и циклический сдвиг - это одно и то же. вроде одни и те же доки читаем, а результат разный %) Цитата Нужно, чтоб работало именно так: направление сдвига не перепутали ?  слова про msb относились к сдвигу вправо >>>, а не влево <<< %) Цитата(Shaienn @ Feb 3 2010, 22:04)  Выполнив: Q = 7'b0000111 Q <= Q <<< 3 Хочу получить: Q == 7'b0111000. в данном случае именно так и будет, но если Q получает значение только по initial, то квартус Q тупо подвесит VCC/GND и выдаст предупреждение. но если вы имели в виду вот это Цитата Q = 7'b1000111 Q <= Q <<< 3 Хочу получить: Q == 7'b0111100 то такое одними стандартными сдвигами не сделать, лучше воспользоваться конкатенацией %) например q <= {q[6:0], q[7]} для циклического сдвига на 1 бит.
--------------------
|
|
|
|
|
Feb 4 2010, 04:32
|
Частый гость
 
Группа: Участник
Сообщений: 103
Регистрация: 21-06-09
Пользователь №: 50 494

|
Цитата(des00 @ Feb 4 2010, 08:10)  вроде одни и те же доки читаем, а результат разный %) направление сдвига не перепутали ?  слова про msb относились к сдвигу вправо >>>, а не влево <<< %) в данном случае именно так и будет, но если Q получает значение только по initial, то квартус Q тупо подвесит VCC/GND и выдаст предупреждение. но если вы имели в виду вот это то такое одними стандартными сдвигами не сделать, лучше воспользоваться конкатенацией %) например q <= {q[6:0], q[7]} для циклического сдвига на 1 бит. Да, хочу, чтобы работало как в приведенном Вами последнем примере. Спасибо за информацию. Буду грызть дальше. Цитата(Dima_G @ Feb 4 2010, 07:49)  << - битовый сдвиг <<< - арифметический Код input clock; output S;
reg [6:0] Q;
initial begin Q = 7'b1111110; end
always @(posedge clock) begin Q <= {Q[5:0], Q[6]}; end
assign S = Q[6]; Должно бы работать, но на выходе 0. Цитата(des00 @ Feb 4 2010, 08:10)  если Q получает значение только по initial, то квартус Q тупо подвесит VCC/GND и выдаст предупреждение. А как правильно задать значение для Q?
|
|
|
|
|
Feb 4 2010, 04:33
|
Вечный ламер
     
Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453

|
Цитата(Shaienn @ Feb 3 2010, 22:27)  Должно бы работать, но на выходе 0. у меня работает, моделирование в аттаче %) скорее всего квартус игнорирует ваш initial, надо ему сказать что бы он этого не делал. либо сделать какой либо сигнал сброса вашей схемы, который инициализирует регистр Q делается это в секции settings -> synthesis -> options -> Ignore Initial
Эскизы прикрепленных изображений
--------------------
|
|
|
|
|
Feb 10 2010, 07:21
|
Частый гость
 
Группа: Участник
Сообщений: 103
Регистрация: 21-06-09
Пользователь №: 50 494

|
Снова добрый день. Спаял я макетную плату для epm3032. Вроде все правильно сделал. Обнаруживается через ByteBlaster. Зашиваю следующий код: Код module Try_AND ( // {{ALTERA_ARGS_BEGIN}} DO NOT REMOVE THIS LINE! reset, clock, C // {{ALTERA_ARGS_END}} DO NOT REMOVE THIS LINE! ); // Port Declaration input reset; input clock; output C;
assign C = clock && ~reset; endmodule Контакт reset - через кнопку на 3.3 вольта. На выходе С = 0, независимо от состояние ноги reset. Но, в то же время, когда изменишь эту строчку на assign C = clock, на выходе, как и завещано, сигнал тактирования. Почему-то не обрабатывается сигнал reset. Подскажите направление поисков. PS Pin Assignment сделал. Спасибо.
Сообщение отредактировал Shaienn - Feb 10 2010, 07:27
|
|
|
|
|
Feb 10 2010, 07:36
|
Гуру
     
Группа: Свой
Сообщений: 2 435
Регистрация: 6-10-04
Из: Петербург
Пользователь №: 804

|
Цитата(Shaienn @ Feb 10 2010, 10:21)  Снова добрый день. Контакт reset - через кнопку на 3.3 вольта. На выходе С = 0, независимо от состояние ноги reset. Но, в то же время, когда изменишь эту строчку на assign C = clock, на выходе, как и завещано, сигнал тактирования. Почему-то не обрабатывается сигнал reset. Подскажите направление поисков. В Квартусе синтезируемая инициализация пройдет таким образом без ресета reg [6:0] Q = 7'b1111110; Что касется кнопки, квартус не причем. Со схематикой кнопки намудрили. (На входе ресет надо получить не только уверренную 1, но и уверенный ноль (Если в функции с приоритетностью не напутано. Скобок для наглядности не жалейте. чтобы в стандарт не лазить). Смотрите реализацию схемы в RTL просмотрщике квартуса.
|
|
|
|
|
Feb 10 2010, 07:45
|
Частый гость
 
Группа: Участник
Сообщений: 103
Регистрация: 21-06-09
Пользователь №: 50 494

|
Цитата(sazh @ Feb 10 2010, 11:36)  В Квартусе синтезируемая инициализация пройдет таким образом без ресета reg [6:0] Q = 7'b1111110;
Что касется кнопки, квартус не причем. Со схематикой кнопки намудрили. (На входе ресет надо получить не только уверренную 1, но и уверенный ноль (Если в функции с приоритетностью не напутано. Скобок для наглядности не жалейте. чтобы в стандарт не лазить). Смотрите реализацию схемы в RTL просмотрщике квартуса. Точно. Подвесил pulldown резистор к ноге и все стало как надо. Спасибо большое.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|