реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Работа с несколькими источниками сигнала для одного компанента, Quartus II
Lixlex
сообщение Nov 8 2011, 04:47
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 40
Регистрация: 8-11-11
Из: Рязань
Пользователь №: 68 183



Здравствуйте, товарищи! Столкнулся при освоении QUARTUS c одной проблемой, очень неприятной для меня. Для наглядности опишу ситуацию:
У нас есть 8-битный регистр даннные в который заносятся по шине data[7..0]. Таким образом получается, что кроме как через эту шину не как не смогу занести в него данные. А мне нужно управлять отдельными битами регистра, но по другой линии. Посоветуйте пожалуйста как это по красивее сделать? Буду благодарен за пример схемы или кода на AHDL.
Напрашивается 2 способа :
1)Ставить мультиплексор, но тогда не очень удобно получится - ведь мне нужно управление лишь отдельными битами регистра
2) ставить перед входом регистра двувходовое " логическое И" на те биты, которыми надо управлять по второй линии - это пожалуй то что мне нужно но опять же не могу сделать так чтобы схема не была громоздкой.
Подскажите как это сделать правильно
Go to the top of the page
 
+Quote Post
barabek
сообщение Nov 8 2011, 05:50
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 540
Регистрация: 16-08-07
Из: Владивосток
Пользователь №: 29 831



Цитата(Lixlex @ Nov 8 2011, 14:47) *
...кода на AHDL....
Напрашивается 2 способа :
1)Ставить мультиплексор, но тогда не очень удобно получится - ведь мне нужно управление лишь отдельными битами регистра
2) ставить перед входом регистра двувходовое " логическое И" на те биты, которыми надо управлять по второй линии - это пожалуй то что мне нужно но опять же не могу сделать так чтобы схема не была громоздкой.
Подскажите как это сделать правильно


Ну и поставьте мультиплексор только на нужные биты. Если будете ставить свою исхему, то по одному "И" не хватит и у Вас в конечном счете получится тот-же мультиплексор. Это если, как я понял, будете рисовать в графике. А если все-таки соберетесь писать на языке, то почему выбрали AHDL, а не нормальный язык?
Go to the top of the page
 
+Quote Post
VladimirB
сообщение Nov 8 2011, 10:32
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 614
Регистрация: 12-06-09
Из: рядом с Москвой
Пользователь №: 50 219



Цитата(Lixlex @ Nov 8 2011, 07:47) *
...но опять же не могу сделать так чтобы схема не была громоздкой.
Подскажите как это сделать правильно


Если вы с одним регистром так паритесь, то что же будет, когда нужно будет написать например Ethernet MAC или HD-видео кодер?
Поэтому, чтобы схема не была громоздкой - надо забить на схематик и писать на языках типа VHDL или Verilog sm.gif
Go to the top of the page
 
+Quote Post
Lixlex
сообщение Nov 8 2011, 11:33
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 40
Регистрация: 8-11-11
Из: Рязань
Пользователь №: 68 183



Дело в том, что это задание по моей курсовой, а сейчас с языком времени особо разобраться нет, хотя конечно хотелось бы.
Go to the top of the page
 
+Quote Post
Sirko
сообщение Nov 8 2011, 11:44
Сообщение #5


Местный
***

Группа: Участник
Сообщений: 245
Регистрация: 15-08-07
Пользователь №: 29 795



Не зная требований к задаче, возможно скажу глупость, но если в задаче ключевое слово "управлять отдельными битами", то возможно поможет XOR.
Go to the top of the page
 
+Quote Post
Lixlex
сообщение Nov 8 2011, 11:51
Сообщение #6


Участник
*

Группа: Участник
Сообщений: 40
Регистрация: 8-11-11
Из: Рязань
Пользователь №: 68 183



Цитата
Если будете ставить свою исхему, то по одному "И" не хватит и у Вас в конечном счете получится тот-же мультиплексор.

как раз хватит. По тому, что по второй линии биты нужно только устанавливать, можно без возможности их сброса (флаг переполнения счетчика).
Но проблема не в этом. Мне немного не понятно как работать с шиной. Допустим есть шина data[7..0] можно брать от нее отдельные проводники, называя их соответственно data[0] data[1] и т.д. Но это получается на столько неудобно! Есть еще какой нибудь другой способ?
Go to the top of the page
 
+Quote Post
des00
сообщение Nov 8 2011, 11:57
Сообщение #7


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Цитата(Lixlex @ Nov 8 2011, 05:51) *
Есть еще какой нибудь другой способ?

Есть, выкинуть в топку схематик и писать все ручками %)

Код
generate
for (int i = 0; i < 8; i++) begin
  always_ff @(posedge clk) begin
    if (set_bits[i] ^ write)
      data[i] <= set_bits[i] | write_data[i];
  end
endgenerate



--------------------
Go to the top of the page
 
+Quote Post
Lixlex
сообщение Nov 8 2011, 15:18
Сообщение #8


Участник
*

Группа: Участник
Сообщений: 40
Регистрация: 8-11-11
Из: Рязань
Пользователь №: 68 183



по вашим совету немного поковырял верилог.
Код
module TMODE (in_dta, s_gate1, s_ct1, out_dta);

input[7:0] in_dta;
input s_gate1;
input s_ct1;

output[7:0] out_dta;

reg[7:0] out_dta; //регистр
wire s_ct1, s_gate1; //отдельные линии для установки битов
wire[7:0] in_dta; //шина по которой заносится байт целиком

always @(s_ct1, s_gate1, in_dta)
begin
    out_dta[7]=in_dta[7]|s_gate1;
    out_dta[6]=in_dta[6]|s_ct1;
    out_dta[5:0]= in_dta[5:0];
end
endmodule

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



Сообщение отредактировал Lixlex - Nov 8 2011, 15:20
Go to the top of the page
 
+Quote Post
barabek
сообщение Nov 8 2011, 22:29
Сообщение #9


Знающий
****

Группа: Свой
Сообщений: 540
Регистрация: 16-08-07
Из: Владивосток
Пользователь №: 29 831



Цитата(Lixlex @ Nov 9 2011, 01:18) *
по вашим совету немного поковырял верилог.



Ну так другой разговор sm.gif

Не совсем в курсе логики Вашей конкретной задачи, но это уже Вы сами справитесь.
По поводу регистра. Вы хотите, что бы данные фиксировались. Следовательно должна получиться синхронная схема (и это правильно), а это в свою очередь требует присутствие в схеме клока. И тогда Ваш код незначительно изменится:
Код
module TMODE (clk,in_dta, s_gate1, s_ct1, out_dta);
input[7:0] in_dta;
input s_gate1;
input s_ct1;
input clk;
output[7:0] out_dta;
reg[7:0] out_dta; //регистр
wire s_ct1, s_gate1; //отдельные линии для установки битов
wire[7:0] in_dta; //шина по которой заносится байт целиком
//always @(s_ct1, s_gate1, in_dta)
always @(posedge clk) //регистр, защелкивающийся по переднему фронту клока
begin
     out_dta[7]<=in_dta[7]|s_gate1;//В этих строках заменяем блокирующее (=) на неблокирующее(<=) присваивание, оно здесь больше подходит по смыслу
     out_dta[6]<=in_dta[6]|s_ct1;
     out_dta[5:0]<= in_dta[5:0];
end
endmodule
Go to the top of the page
 
+Quote Post
Lixlex
сообщение Nov 9 2011, 05:44
Сообщение #10


Участник
*

Группа: Участник
Сообщений: 40
Регистрация: 8-11-11
Из: Рязань
Пользователь №: 68 183



благодарю за помощь. Будем разбираться!
Go to the top of the page
 
+Quote Post
Putnik
сообщение Nov 29 2011, 13:32
Сообщение #11


Местный
***

Группа: Свой
Сообщений: 214
Регистрация: 4-09-07
Из: Зеленоград
Пользователь №: 30 272



Цитата(des00 @ Nov 8 2011, 15:57) *
Есть, выкинуть в топку схематик и писать все ручками %)

Код
generate
for (int i = 0; i < 8; i++) begin
  always_ff @(posedge clk) begin
    if (set_bits[i] ^ write)
      data[i] <= set_bits[i] | write_data[i];
  end
endgenerate

в квартусе и квесте такая конструкция заработала только при объявлении genvar i, и именовании begin:tralala

Код
genvar i;
generate
for (i = 0; i < 8; i++) begin:tralala
  always_ff @(posedge clk) begin
    if (set_bits[i] ^ write)
      data[i] <= set_bits[i] | write_data[i];
  end
endgenerate


что дает именование begin?


--------------------
за Навального!
Go to the top of the page
 
+Quote Post
des00
сообщение Nov 29 2011, 14:18
Сообщение #12


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Цитата(Putnik @ Nov 29 2011, 07:32) *
в квартусе и квесте такая конструкция заработала только при объявлении genvar i, и именовании begin:tralala

и это правильно, в моем коде были ошибки wink.gif теперь вы их нашли и устранили, а вопрос что значит ищется в стандарте минуты за 3 wink.gif


--------------------
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 24th June 2025 - 12:53
Рейтинг@Mail.ru


Страница сгенерированна за 0.01448 секунд с 7
ELECTRONIX ©2004-2016