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

 
 
3 страниц V  < 1 2 3  
Reply to this topicStart new topic
> Тернарный оператор VS конструкция if-else, Какова логика языка? Почему одно не заменяет другое?
RobFPGA
сообщение Jun 8 2018, 11:49
Сообщение #31


Профессионал
*****

Группа: Свой
Сообщений: 1 073
Регистрация: 23-12-04
Пользователь №: 1 643



Приветствую!
Цитата(Flip-fl0p @ Jun 8 2018, 14:39) *
Экономия получается на отладке в Modelsim...., которая занимает ~80% времени.
На чем именно экономия?
Ведь отлаживать Вы будете генерацию сигналов управления в FSM точно так же. А кода при этом как минимум в 2 раза больше.
Удачи! Rob.
Go to the top of the page
 
+Quote Post
Flip-fl0p
сообщение Jun 8 2018, 12:08
Сообщение #32


В поисках себя...
****

Группа: Свой
Сообщений: 644
Регистрация: 11-06-13
Из: Санкт-Петербург
Пользователь №: 77 140



Цитата(RobFPGA @ Jun 8 2018, 14:49) *
....
При раздельном описании
9 линий кода для инстацирования модуля счетчика,
5 линии кода для описания сигналов управления, и собственно счетчика
4 линии для сигналов управления в начале FSM (default value)
2 (в среднем) линии для сигналов управления в каждой ветви где счетчиком надо управлять.
....
Приветствую!
На чем именно экономия?
Ведь отлаживать Вы будете генерацию сигналов управления в FSM точно так же. А кода при этом как минимум в 2 раза больше.
Удачи! Rob.

Вот только мы экономим не строчки кода, а время.
И из всех строчек кода мы фактически должны проверить только сигналы управления счетчиком. Ибо все остальное было проверено и отлажено ранее.
Если взять счетчик с сигналом разрешения работы, и синхронной загрузкой мы в FSM формируем только эти сигналы, ну возможно ещё данные, которые загружаем в счетчик, соответственно и проверяем только их. Остальное мы отладили раньше.
А если в счетчике есть параметр вывода его значения на консоль - то мы можем вообще смотреть в консоли то что выдает счетчик. Или вообще писать все это добро в файл. И включать этот режим очень быстро и просто - в настройках модуля.
А вообще спор ни о чем. Каждый делает так, как считает правильным . Ибо так как правильно зависит от личного опыта, и субъективного взгляда на организацию HDL проектов. beer.gif
Go to the top of the page
 
+Quote Post
dima32rus
сообщение Jun 8 2018, 12:19
Сообщение #33


Частый гость
**

Группа: Свой
Сообщений: 132
Регистрация: 9-11-12
Из: г. Брянск
Пользователь №: 74 311



Переделал модуль. Теперь счетчик, вынесенный из автомата, описывается в комбинационной части. Да, если так, то писанины стало меньше. С точки зрения реализации же, по-моему, оба счетчика абсолютно одинаковы.
Но теперь читается хуже. Счетчик, который в автомате, сразу виден в одном месте. А вот работа второго счетчика не так очевидна. Для этого надо смотреть на сам автомат, а также на логику, которая управляет счетчом. Причем каждый сигнал описывается отдельно.
CODE

module cnt_test
(
//Global
input CLK_i ,
input nRESET_i ,

//Input
input IN_PULSE_i ,

//Control
input ENA_CNT_i ,
input CLR_CNT_i ,

//Output of counter
output [31:0] OUT_CNT0_o32 ,
output [31:0] OUT_CNT1_o32
);

reg [31:0] out_cnt0_o32;
reg [31:0] out_cnt1_o32;
assign OUT_CNT0_o32 = out_cnt0_o32;
assign OUT_CNT1_o32 = out_cnt1_o32;

reg [7:0] state; //FSM
localparam integer sIDLE = 0,
sCOUNT = 1,
sSTOP = 2;

wire cnt_1_en = (state == sCOUNT) & ENA_CNT_i & IN_PULSE_i;
wire cnt_1_clr = (state == sSTOP) & CLR_CNT_i;

always @(posedge CLK_i or negedge nRESET_i)
begin
if(~nRESET_i)
begin
out_cnt0_o32 <= 0;
state <= sIDLE;
end
else
begin
case(state)

sIDLE:
begin
if(ENA_CNT_i)
state <= sCOUNT;
end

sCOUNT:
begin
if(ENA_CNT_i)
begin
if(IN_PULSE_i)
begin
out_cnt0_o32 <= out_cnt0_o32 + 1'b1;
end
end
else
begin
state <= sSTOP;
end
end

sSTOP:
begin
state <= sIDLE;
if(CLR_CNT_i)
begin
out_cnt0_o32 <= 0;
end
end

endcase
end

end

always @(posedge CLK_i or negedge nRESET_i)
begin
if(~nRESET_i)
begin
out_cnt1_o32 <= 0;
end
else
begin
if(cnt_1_en)
out_cnt1_o32 <= out_cnt1_o32 + 1'b1;
else if(cnt_1_clr)
out_cnt1_o32 <= 0;
end
end

endmodule

Если же делать так, чтобы счетчик считал только в одном конкретном состоянии автомата, тогда надо добавлять состояний. В одном счетчик тикает, в другом простаивает. Однако тогда между автоматом и счетчиком будет минимум логики. Особенно при кодировке One-Hot.
Go to the top of the page
 
+Quote Post
flammmable
сообщение Jun 13 2018, 08:31
Сообщение #34


Участник
*

Группа: Участник
Сообщений: 17
Регистрация: 4-06-18
Пользователь №: 104 848



Цитата(iosifk @ Jun 7 2018, 14:45) *
Если Вы знаете, что такое "автомат", то попробуйте представить себе набор автоматов - мастер-слэйв-слэйв.

Отличный паттерн разработки! Спасибо! А не подскажите ли, как лучше по вашему опыту: все автоматы делать в одном блоке always - в разных case (я сейчас так сделал) или "один автомат - один модуль"?
Go to the top of the page
 
+Quote Post
iosifk
сообщение Jun 13 2018, 08:49
Сообщение #35


Гуру
******

Группа: Модераторы
Сообщений: 3 916
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369



Цитата(flammmable @ Jun 13 2018, 11:31) *
как лучше по вашему опыту: все автоматы делать в одном блоке always - в разных case (я сейчас так сделал) или "один автомат - один модуль"?

Я Ваш вопрос не понял. А что касается мастер-слэйв, то об этом можно прочитать в "Кратком Курсе", раздел "дополнительный об автоматах"...


--------------------
www.iosifk.narod.ru
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 18th June 2018 - 13:10
Рейтинг@Mail.ru


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