Перейти к содержанию
    

Сравнение двух реализаций одного и того же модуля

Добра всем!

Есть исходный модуль, описанный так:
 

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 выглядит так:


rtl.png.708193dee4c9a3edcca16828a0b675b6.png

в то время как "прилизанный" так:

rtl.png.4d0ff78e534f4d2e350d370a782d830a.png

Вопросы: куда делся декодер Decoder0 и какой test bench написать, чтобы доказать или опровергнуть идентичность реализаций?

На вс. случай прилагаю сами проекты...

new.zip

old.zip

Изменено пользователем MaratZuev
topic misspeling

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1. Если вы не уверены в правильности/идентичности предложенных модулей, посмотрите не RTL модель, а что покажет схема после синтеза. Это будет и правильнее и точнее

2. На самом деле они идентичны и DECODER делает с однобитной шины 2 бита выбора для мультиплексора MUX21 что является избыточным для данного компонента. В случае расширения это конечно избавит от необходимости создавать новые неты.

3. Тестбенч пишете в параллель 2 компонента и подаёте на входы a[3:0] и cs, различные комбинации в то время когда остальные места остаются статическими (кроме клока). Но результат и так будет одинаковым.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо, всё оказалось значительно проще:
в каталоге \simulation\modelsim\ есть файлы intm.vo и intm_fast.vo - вот их и достаточно сравнить для того и другого проекта (достаточно сравнить intm.vo).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для этого есть сравнение эквивалентности исходниках и получаемого кода (Formality or Conformal от synopsys or cadence).

Синтезируемый результат не всегда аналогичен исходному коду, либо требуется проверить изменения в коде или же процесс ECO.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...