|
|
  |
Работа с несколькими источниками сигнала для одного компанента, Quartus II |
|
|
|
Nov 8 2011, 04:47
|
Участник

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

|
Здравствуйте, товарищи! Столкнулся при освоении QUARTUS c одной проблемой, очень неприятной для меня. Для наглядности опишу ситуацию: У нас есть 8-битный регистр даннные в который заносятся по шине data[7..0]. Таким образом получается, что кроме как через эту шину не как не смогу занести в него данные. А мне нужно управлять отдельными битами регистра, но по другой линии. Посоветуйте пожалуйста как это по красивее сделать? Буду благодарен за пример схемы или кода на AHDL. Напрашивается 2 способа : 1)Ставить мультиплексор, но тогда не очень удобно получится - ведь мне нужно управление лишь отдельными битами регистра 2) ставить перед входом регистра двувходовое " логическое И" на те биты, которыми надо управлять по второй линии - это пожалуй то что мне нужно но опять же не могу сделать так чтобы схема не была громоздкой. Подскажите как это сделать правильно
|
|
|
|
|
Nov 8 2011, 11:33
|
Участник

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

|
Дело в том, что это задание по моей курсовой, а сейчас с языком времени особо разобраться нет, хотя конечно хотелось бы.
|
|
|
|
|
Nov 8 2011, 11:51
|
Участник

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

|
Цитата Если будете ставить свою исхему, то по одному "И" не хватит и у Вас в конечном счете получится тот-же мультиплексор. как раз хватит. По тому, что по второй линии биты нужно только устанавливать, можно без возможности их сброса (флаг переполнения счетчика). Но проблема не в этом. Мне немного не понятно как работать с шиной. Допустим есть шина data[7..0] можно брать от нее отдельные проводники, называя их соответственно data[0] data[1] и т.д. Но это получается на столько неудобно! Есть еще какой нибудь другой способ?
|
|
|
|
|
Nov 8 2011, 15:18
|
Участник

Группа: Участник
Сообщений: 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
|
|
|
|
|
Nov 8 2011, 22:29
|
Знающий
   
Группа: Свой
Сообщений: 540
Регистрация: 16-08-07
Из: Владивосток
Пользователь №: 29 831

|
Цитата(Lixlex @ Nov 9 2011, 01:18)  по вашим совету немного поковырял верилог. Ну так другой разговор  Не совсем в курсе логики Вашей конкретной задачи, но это уже Вы сами справитесь. По поводу регистра. Вы хотите, что бы данные фиксировались. Следовательно должна получиться синхронная схема (и это правильно), а это в свою очередь требует присутствие в схеме клока. И тогда Ваш код незначительно изменится: Код 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
|
|
|
|
|
Nov 9 2011, 05:44
|
Участник

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

|
благодарю за помощь. Будем разбираться!
|
|
|
|
|
Nov 29 2011, 13:32
|
Местный
  
Группа: Свой
Сообщений: 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?
--------------------
за Навального!
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|