Jump to content

    
Sign in to follow this  
evmal06

Оптимизация кода на Verilog

Recommended Posts

Всем привет. Есть данный код для симуляции работы дешифратора (само описание дешифратора и тестбенч). 

сам дешифратор:

module Test(x0, x1, x2, x3, F0, F1, F2, F3, F4, F5, F6, F7, F8, F9,
															F10, F11, F12, F13, F14, F15);
input x0, x1, x2, x3;

output F0, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, F13, F14, F15;

assign F0=!x0&&!x1&&!x2&&!x3;

assign F1=!x0&&!x1&&!x2&&x3;

assign F2=!x0&&!x1&&x2&&!x3;

assign F3=!x0&&!x1&&x2&&x3;

assign F4=!x0&&x1&&!x2&&!x3;

assign F5=!x0&&x1&&!x2&&x3;

assign F6=!x0&&x1&&x2&&!x3;

assign F7=!x0&&x1&&x2&&x3;

assign F8=x0&&!x1&&!x2&&!x3;

assign F9=x0&&!x1&&!x2&&x3;

assign F10=x0&&!x1&&x2&&!x3;

assign F11=x0&&!x1&&x2&&x3;

assign F12=x0&&x1&&!x2&&!x3;

assign F13=x0&&x1&&!x2&&x3;

assign F14=x0&&x1&&x2&&!x3;

assign F15=x0&&x1&&x2&&x3;

endmodule

testbench:

`timescale 1 ns / 1 ns
module testbench;
localparam t = 20;
reg x0, x1, x2, x3;
reg F0, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, F13, F14, F15;

initial
begin
x0 <= 0;
x1 <= 0;
x2 <= 0;
x3 <= 0;
#20
x0 <= 0;
x1 <= 0;
x2 <= 0;
x3 <= 1;
#20
x0 <= 0;
x1 <= 0;
x2 <= 1;
x3 <= 0;
#20
x0 <= 0;
x1 <= 0;
x2 <= 1;
x3 <= 1;
#20
x0 <= 0;
x1 <= 1;
x2 <= 0;
x3 <= 0;
#20
x0 <= 0;
x1 <= 1;
x2 <= 0;
x3 <= 1;
#20
x0 <= 0;
x1 <= 1;
x2 <= 1;
x3 <= 0;
#20
x0 <= 0;
x1 <= 1;
x2 <= 1;
x3 <= 1;
#20
x0 <= 1;
x1 <= 0;
x2 <= 0;
x3 <= 0;
#20
x0 <= 1;
x1 <= 0;
x2 <= 0;
x3 <= 1;
#20
x0 <= 1;
x1 <= 0;
x2 <= 1;
x3 <= 0;
#20
x0 <= 1;
x1 <= 0;
x2 <= 1;
x3 <= 1;
#20
x0 <= 1;
x1 <= 1;
x2 <= 0;
x3 <= 0;
#20
x0 <= 1;
x1 <= 1;
x2 <= 0;
x3 <= 1;
#20
x0 <= 1;
x1 <= 1;
x2 <= 1;
x3 <= 0;
#20
x0 <= 1;
x1 <= 1;
x2 <= 1;
x3 <= 1;
end

Test dut
(
.x0(x0),
.x1(x1),
.x2(x2),
.x3(x3),
.F0(F0),
.F1(F1),
.F2(F2),
.F3(F3),
.F4(F4),
.F5(F5),
.F6(F6),
.F7(F7),
.F8(F8),
.F9(F9),
.F10(F10),
.F11(F11),
.F12(F12),
.F13(F13),
.F14(F14),
.F15(F15)
);

initial
begin
#300;
$finish();
end
endmodule

Необходимо оптимизировать код. Как это можно сделать? Подскажите, пожалуйста

Share this post


Link to post
Share on other sites

Приветствую!

4 hours ago, evmal06 said:

...

testbench:

...

Необходимо оптимизировать код. Как это можно сделать? Подскажите, пожалуйста

Для  начала почитайте  учебник по Verilog  и  подумайте как  представить  входные и выходные  сигналы  как вектор,  что бы работать с числом,  а не с отдельными битами.

Например так -

...
input x0, x1, x2, x3;
output F0, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, F13, F14, F15;
...

wire [ 3:0] x_in;
wire [15:0] y_ou;

assign x_in = {x3, x2, x1, x0};

assign y_ou = 1<<(~x_in);  

assign {F0, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, F13, F14, F15} = y_ou;

А заодно и подучите битовые операции с векторами. А то препод заподозрит неладное если не сможете объяснить  всю эту белиберду :acute:

Если  еще и циклы выучите то сможете существенно упростить ваш testbench.  :yes3:

 

Удачи! Rob.

Share this post


Link to post
Share on other sites

Спасибо большое за помощь! 

12 часов назад, RobFPGA сказал:

Приветствую!

Для  начала почитайте  учебник по Verilog  и  подумайте как  представить  входные и выходные  сигналы  как вектор,  что бы работать с числом,  а не с отдельными битами.

А можете, пожалуйста, какой-нибудь учебник посоветовать. Был бы очень рад!

 

Share this post


Link to post
Share on other sites
36 minutes ago, evmal06 said:

Спасибо большое за помощь! 

А можете, пожалуйста, какой-нибудь учебник посоветовать. Был бы очень рад!

 

https://marsohod.org/11-blog/60-books

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this