dsp 0 28 июля, 2004 Опубликовано 28 июля, 2004 · Жалоба может кто подскажет vhdl код 32-битного умножителя и сумматора стандарта ieee-754 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
3.14 0 6 сентября, 2004 Опубликовано 6 сентября, 2004 · Жалоба Когдато задался целью приклеить умножитель к Меге128. Синтезировал в Synplify7.5. Занимало 15% от Spartan2-200. До отладки дело не дошло, но тестбенч в ModelSim грубых ошибок не выявил (хотя голову на отсечение не дам, давно было). module FMULT_module(inA, inB, outY, clc); input [31:0] inA; input [31:0] inB; output [31:0] outY; input clc; reg [31:0] outY; reg [8:0] Exponenta; reg [8:0] Exponenta1; reg [7:0] ExpS1; reg [7:0] ExpS2; reg [47:0] Mantisa; reg HbitA; reg HbitB; reg Hbit; reg bitMaxA; reg bitMinA; reg bitMaxB; reg bitMinB; reg Underflow; reg Overflow; reg SigExp; /*------------------------------------- bit 31 - S bits 30:23 - EXP bits 22:0 - MANTISA X=(-1)^S * 2^(EXP-127) * 1.MANTISSA -------------------------------------*/ always @(posedge clc) begin outY[31] = inA[31] ^ inB[31]; //signed of member ExpS1=inA[30:23]-8'd127; ExpS2=inB[30:23]-8'd127; Exponenta=$signed(ExpS1)+$signed(ExpS2); Hbit = Overflow | Underflow; Mantisa=$unsigned({1'b1,inA[22:0]}) * $unsigned({1'b1,inB[22:0]}); SigExp=Exponenta[8]; Exponenta1=Exponenta[7:0] ^ 8'hff; Exponenta1=Exponenta1 + 1; if(SigExp) begin if(Exponenta1[7:0]>8'd127) begin Exponenta=8'h81; outY[22:0]=23'h0; end else case(Mantisa[47:46]) 2'b01 : begin outY[22:0]={Mantisa[45:23]}; end 2'b10 : begin outY[22:0]={Mantisa[45:23]}; outY[22:0]={1'b0,Mantisa[45:24]}; Exponenta=Exponenta + 8'h01; end 2'b11 : begin outY[22:0]={Mantisa[46:24]}; Exponenta=Exponenta + 8'h01; end endcase end else begin if(Exponenta[7:0]>8'd127) begin Exponenta=8'h80; outY[22:0]=23'h0; end else case(Mantisa[47:46]) 2'b01 : begin outY[22:0]={Mantisa[45:23]}; end 2'b10 : begin outY[22:0]={1'b0,Mantisa[45:24]}; Exponenta=Exponenta + 8'h01; end 2'b11 : begin outY[22:0]={Mantisa[46:24]}; Exponenta=Exponenta + 8'h01; end endcase end Exponenta=$signed(Exponenta)+$signed(8'd127); outY[30:23]=Exponenta[7:0]; end endmodule :ph34r: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vetal 0 30 сентября, 2004 Опубликовано 30 сентября, 2004 · Жалоба на www.opencores.org можно найти пример целого алу для плавающей точки Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
3.14 0 30 сентября, 2004 Опубликовано 30 сентября, 2004 · Жалоба на www.opencores.org можно найти пример целого алу для плавающей точки Тамашнюю АЛУ я не пробовал, но вот оотдельный умножитель (с опенкорс) занял у меня (дай бог памяти) половину сартана на 200т, и работало это хозяйство на 6МГц (описанный модуль ~ 30МГц тянет). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vetal 0 30 сентября, 2004 Опубликовано 30 сентября, 2004 · Жалоба Сам использовал только для симуляции. С частотой согласен. Но никто не мешает доработать алу(фпу) до конвейера. Дрегого можно было и не ожидать, т.к. там много математики(+,-,/,преобразование в целое и обратно). Сейчас откомпилировал - 62% еп1с12. для_обработки_сигналов_лучше_использовать_микросхемы_с_дсп блоками. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
3.14 0 1 октября, 2004 Опубликовано 1 октября, 2004 · Жалоба Не спора ради, а флеймового продолжения. Я связялся с написанием модуля: 1. просто интересно было (жизнь инженера итак чмошна и безстрастна, зачем лишать себя единственной радости - созидания, пускай и слабомотивированного) 2. захочу, изменю разрядность мантиссы, экспоненты (вдруг задумаю рекурсивный фильтр на невероятной скорости) 3. все таки свой блок проще расконвеерить Как ни старался но вышесказанное опять звучит как вызывающее утверждение :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vetal 0 4 октября, 2004 Опубликовано 4 октября, 2004 · Жалоба Самому реализовывать можно и нужно, когда дело идет к реализации. Подобные ядра помогают, когда нужно быстро сделать FFT, FIR или RSE, и поэксперементировать над ним, т.к. качественный fpu займет время на разработку. Относительно фильтров: на ftp Alterы есть бесплатная программа на tcl, которая синтезирует фильтры по заданным параметрам. Один недостаток - на ahdl. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Lefthander 0 20 октября, 2004 Опубликовано 20 октября, 2004 · Жалоба на www.opencores.org можно найти пример целого алу для плавающей точки Тамашнюю АЛУ я не пробовал, но вот оотдельный умножитель (с опенкорс) занял у меня (дай бог памяти) половину сартана на 200т, и работало это хозяйство на 6МГц (описанный модуль ~ 30МГц тянет). :) А какой разрядности был умножитель с опенкорес,а то что-то сомнительно (мягко говоря) 100К экв. вентилей все же...:) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться