MaratZuev 0 29 июля, 2019 Опубликовано 29 июля, 2019 (изменено) · Жалоба Добра всем! Есть исходный модуль, описанный так: module intm ( input res, input [7:0] di, input wr, input cs, input [3:0] a, output reg [7:0] do, input [7:0] int, output reg [7:0] int_m ); reg [7:0] mode; reg adr; always @ (*) case ({cs,a[3:0]}) 5'b10000 : adr = 1'b1; default : adr = 1'b0; endcase always @ (*) case (adr) 1'b1 : do = mode ; default : do = 8'b0; endcase always @ (posedge res or posedge wr) if (res) mode <= 0; else if (adr) mode <= di ; always @ (*) int_m = (~int) & mode; endmodule И есть его "прилизанная" модификация: module intm ( input res, input [7:0] di, input wr, input cs, input [3:0] a, output [7:0] d_o, input [7:0] intpt, output [7:0] int_m ); reg [7:0] mode; wire adr; assign adr = {cs,a} == 5'b10000 ; assign d_o = adr ? mode : 8'b0 ; always @ (posedge res or posedge wr) if (res) mode <= 8'b0; else if (adr) mode <= di; assign int_m = ~intpt & mode; endmodule Исходный код в RTL выглядит так: в то время как "прилизанный" так: Вопросы: куда делся декодер Decoder0 и какой test bench написать, чтобы доказать или опровергнуть идентичность реализаций? На вс. случай прилагаю сами проекты... new.zip old.zip Изменено 29 июля, 2019 пользователем MaratZuev topic misspeling Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nick_K 0 30 июля, 2019 Опубликовано 30 июля, 2019 · Жалоба 1. Если вы не уверены в правильности/идентичности предложенных модулей, посмотрите не RTL модель, а что покажет схема после синтеза. Это будет и правильнее и точнее 2. На самом деле они идентичны и DECODER делает с однобитной шины 2 бита выбора для мультиплексора MUX21 что является избыточным для данного компонента. В случае расширения это конечно избавит от необходимости создавать новые неты. 3. Тестбенч пишете в параллель 2 компонента и подаёте на входы a[3:0] и cs, различные комбинации в то время когда остальные места остаются статическими (кроме клока). Но результат и так будет одинаковым. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MaratZuev 0 30 июля, 2019 Опубликовано 30 июля, 2019 · Жалоба Спасибо, всё оказалось значительно проще: в каталоге \simulation\modelsim\ есть файлы intm.vo и intm_fast.vo - вот их и достаточно сравнить для того и другого проекта (достаточно сравнить intm.vo). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
lexx 0 1 августа, 2019 Опубликовано 1 августа, 2019 · Жалоба Для этого есть сравнение эквивалентности исходниках и получаемого кода (Formality or Conformal от synopsys or cadence). Синтезируемый результат не всегда аналогичен исходному коду, либо требуется проверить изменения в коде или же процесс ECO. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться