Микроконтролери и електроника
http://mcu-bg.com/mcu_site/

Проблем с натрупващ суматор
http://mcu-bg.com/mcu_site/viewtopic.php?f=7&t=4852
Страница 1 от 2

Автор:  medeamona [ Пон Сеп 24, 2007 9:08 pm ]
Заглавие:  Проблем с натрупващ суматор

Налага ми се да проектирам на Verilog (HDL език) натрупващ суматор. Обаче нещо симулацията не е това което трябва да е. Т.е не сумира така както искам аз. Може ли едно рамо? Прилагам и кода.

Прикачени файлове:
sumator.rar [517 Байта]
175 пъти

Автор:  MYXATA [ Вто Сеп 25, 2007 11:57 am ]
Заглавие: 

ти под натрупващ суматор разбираш блок суматор + блок акумулатор ли :?: обединени с обща входноизходна шина данни и управляващи сигнали :?:

Автор:  MYXATA [ Вто Сеп 25, 2007 12:38 pm ]
Заглавие: 

пусни малко инфо за идеята ти....
какво ти е заданието :?:
щото сорса ти е малко ... забърбалучкан ;)

Автор:  MYXATA [ Вто Сеп 25, 2007 1:46 pm ]
Заглавие: 

знaчи квото съм разбрал от сорса ти ,требе да е нещо такова, само че съм го драснал на VHDL щото ми е по лесно ;)
и симулатора симулира и битовете циркулират :)
първият принт от моделсима е с константна величина на входа, вторият е с две значения на входа (променя на по някое време :) след старта ) за по-добра визия :)
а пък твоят проблем :
"Обаче нещо симулацията не е това което трябва да е. Т.е не сумира така както искам аз. "
го има навсякъде -> програмата прави това дето си написал, а не това дето ти се иска да стане

:wink:

ако не е така кажи как ти иска да сумира :?: може да го удурдисаме

Прикачени файлове:
ModelSim_ ()1.pdf [11.35 KiB]
194 пъти
ModelSim_ ().pdf [13.27 KiB]
181 пъти
sum.vhd.pdf [14.4 KiB]
175 пъти

Автор:  syscop [ Вто Сеп 25, 2007 2:40 pm ]
Заглавие: 

Ако съм разбрал правилно човека иска да направи сумиране с натрупване, т.е. ако Yn e 0xff като добави 1 да остане пак същото а не 0.

Автор:  MYXATA [ Вто Сеп 25, 2007 3:09 pm ]
Заглавие: 

syscop написа:
Ако съм разбрал правилно човека иска да направи сумиране с натрупване, т.е. ако Yn e 0xff като добави 1 да остане пак същото а не 0.

айде да ми обясните "сумиране с натрупване" явно не вдявам... ама нали е Академия
единственото за което се сещам е интегриране :!:
и какво е поведението на една такава система?
иде реч това Yn когато достигне 0xff после?

Автор:  syscop [ Вто Сеп 25, 2007 3:52 pm ]
Заглавие: 

После остава същото, докато не се нулира. Използва се при обработка на цветове например. Не е много приятно ако цвета от чер стане бял или обратно. Дали точно това е идеята колегата трябва да каже.

Автор:  MYXATA [ Вто Сеп 25, 2007 4:04 pm ]
Заглавие: 

syscop написа:
После остава същото, докато не се нулира. Използва се при обработка на цветове например. Не е много приятно ако цвета от чер стане бял или обратно. Дали точно това е идеята колегата трябва да каже.

е то и при радарите има тъквиз рабути ;)
а що не си го е написал като условие....
мдаа то отдавна се говори, че требе да има ред при въпросването из форума... щото иначе абе тука проблемче, сорсче, ама веднага, ама туймитионуймити...
нема значение като гледам на колегата му е през "спицата" вече проблема

Автор:  ДедоБоре [ Вто Сеп 25, 2007 8:47 pm ]
Заглавие: 

на английски термина е "saturation". в почти всички dsp-та може да се контролира при събиране и натрупване, дали да има или да я няма.

Автор:  medeamona [ Сря Сеп 26, 2007 7:57 am ]
Заглавие:  идеята е следната:

На входа на суматора има поток данни, на всеки такт искам да се сумира текущите битове с резултата от предното сумиране. Резултата се записва в регистър и при следващия такт нови данни+резултата от рег-а.

А после взимам старшите 6 бита.
Цялата задача е deframer. В случая изчисление на crc.

пс. не съм колега, а колежка. и определено ми е през...

Автор:  woody [ Сря Сеп 26, 2007 11:57 am ]
Заглавие: 

Код:
module add_acc #(
  parameter
    WI = 32,
    WO = 32
) (
  input clk,
  input reset,
  input [WI-1:0] in,
  output reg [WO-1:0] out
);

  always @(posedge clk)
    if (reset)
      out <= 0;
    else
      out <= out + in;

endmodule


Тестов модул:

Код:
module test;

  localparam
    WI = 8,
    WO = 8;

  reg clk;
  reg reset;

  reg [WI-1:0] data;
  wire [WO-1:0] acc;

  add_acc #(
    .WI (WI),
    .WO (WO)
  ) addacc0 (
    .clk (clk),
    .reset (reset),
    .in (data),
    .out (acc)
  );

  initial
    forever
      #5 clk <= ~clk;

  initial
    begin
      $monitor ("time: %6g   reset=%b data=%d acc=%d", $time, reset, data, acc);
      clk = 0;
      reset = 0;
      #10 reset = 1;

      #10 reset = 0;
      data = 128;
      #10 data = 64;
      #10 data = 32;
      #10 data = 16;
      #10 data = 8;
      #10 data = 4;
      #10 data = 2;
      #10 data = 1;
      #10 $finish;
    end

endmodule



P.S. жената-инженерка == морско свинче

Автор:  medeamona [ Сря Сеп 26, 2007 1:16 pm ]
Заглавие:  не знам за...

не знам за морското свинче, но WI = 32, не ми е ясно...
гледах, мяса на Verilog, но такъв запис на присвояване не бях виждала... ( доколкото знам се указва броят битове, вида на записа - двоичен, десетичен и т.н. и накрая ст-ста в указаната вече бройна с-ма)
Разясни малко моля!!!
и къде дефинираш параметри в модула (там все си мисля бе мястото за входове и изходи, упоменаването им).

Автор:  woody [ Сря Сеп 26, 2007 1:42 pm ]
Заглавие: 

Verilog-2001 е, само че за твое удобство беше с параметри да си го ползваш както прецениш. Но .... ето ти по-проста версия без параметри, фиксирана на 32-битов вход и 32-битов акумулатор:

Код:
module add_acc (
  input clk,
  input reset,
  input [31:0] in,
  output reg [31:0] out
);

  always @(posedge clk)
    if (reset)
      out <= 0;
    else
      out <= out + in;

endmodule


Ако загледаш тестовия модул ще си отговориш на повечето въпроси - как се ползва модулът, как му се прикачат сигнали и как му се предават параметри така че да не са "default" стойностите.

От любопитство, това домашно някакво в университет ли е?

EDIT: Като елементарна задачка, опитай се да му добавиш "enable" вход, за да не натрупва на всеки тактов импулс.

Автор:  VSU [ Сря Сеп 26, 2007 2:26 pm ]
Заглавие: 

module add_acc (
input clk,
input reset,
input enable,
input [31:0] in,
output reg [31:0] out
);

always @(posedge clk)
if (reset) out <= 0;
else
if (enable) out <= out + in;

endmodule


така става ли :) за пръв път пипам такова нещо

Автор:  woody [ Сря Сеп 26, 2007 2:32 pm ]
Заглавие: 

Мда, това е решението което ще се синтезира правилно.

Страница 1 от 2 Часовете са според зоната UTC + 2 часа [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/