Отговори на тема  [ 33 мнения ]  Отиди на страница 1, 2, 3  Следваща
Малък въпрос за CPLD Xilinx 
Автор Съобщение
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Вто Юни 07, 2005 6:20 pm
Мнения: 3532
Мнение Малък въпрос за CPLD Xilinx
Абе тука едно CPLD ме мъчи.
Досега не съм се занимавал с програмируеми логики (има само някаква много бегла и смътна представа).
Та това CPLD е XCR3064.
Програмиран е вече. Имам някакъв .jed файл (програма или код, не знам как се нарича).
Та идеята е следната - трябва да разбера какво точно прави това нещо, за да решим дали може да караме и без него.
За целта обаче ми трябва поне развойната среда на Xilinx (предполагам). Та въпроса е - какъв софтуер ми трябва всъщност и откъде да си го дръпна...
10х


Сря Авг 17, 2005 9:58 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Яну 26, 2005 2:01 pm
Мнения: 1952
Местоположение: Варна
Мнение 
Ако имаш само .jed файла няма да можеш да разбереш нищо за вътрешната структура. Или поне с това което предлага безплатната среда на WebPack такова нещо не ми е известно да е възможно. .jed файла е двоичен файл, информация за "дупчене" в матрицата.


Сря Авг 17, 2005 11:57 pm
Профил
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Пон Юли 04, 2005 11:51 pm
Мнения: 651
Местоположение: София
Мнение 
Мдааааааа ...... Здрав е прав ... :)

Няма начин по които да можеш да синтезираш тоя jed. фаил в нещо което дори да ти подскаже квя точно е функцията на CPLD'то. ..... най много да извлечеш схемата на тва дето е вътре .... ама да ти кажа до сега не съм виждал няква програмка дето да прави това ... макар че е възможно (ако ти се занимава де)

Инчае софтуера необходим за синтезиране и програмиране на CPLD/FPFA e WebPack (безплатен) или ISE (ако го изкопаеш от някъде) ....

За развоини средства ..... най ефтиното нещо което може да се купи от Хилинукс е : DO-CPLD-DK $49.99

http://www.xilinx.com/xlnx/xebiz/productview.jsp?sGlobalNavPick=&sSecondaryNavPick=&category=-18907&iLanguageID=1&category=/Xilinx+Products/Hardware+and+Cables/Development+Boards/CPLD+Boards
може да го поръчаш чрез Петрекс92 (тея пичове трябва да ми плащат вече за реклама ... :) )

_________________
От наше село са види връо, ама от връо се невиди наше село ... що така и я незнам .. ?!?


Чет Авг 18, 2005 12:12 am
Профил ICQ WWW
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Вто Юни 07, 2005 6:20 pm
Мнения: 3532
Мнение 
Ааа, ние с Петрекс работим по принцип... Направихме им малко оборот (абе не беше малко ама...)

Добре, ами нещо такова ще свърши ли работа

....
module edb(
bsdcs,
read,
mcdaen,
mcdir,
brd,
bbdqm,
bdqm,
bsdwe,
bresetn,
cpld_clk,
int_boot,
ext_boot,
nor_boot,
ser_boot,
func_test,
tic_test,
para_test,
scan_test,
eeclk,
......


Това също го имам (пише че е сорс код)

Идеята ми беше за нещо безплатно, може и хакната версия на нещо на Xilinx.. :wink:
Горе-долу колкото да разберем за какво иде реч (ако успеем де)


Чет Авг 18, 2005 11:18 am
Профил
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Пон Юли 04, 2005 11:51 pm
Мнения: 651
Местоположение: София
Мнение 
Еееее .... тва второто вече може :)

От него може да разберете всичко ..... разбира се трябва ви човек които да го разчете де ... (вище разширението на фаила .... ако е .v - то тогава е писано на Verilog ако е .vhdl то тогава е писано на VHDL ;) )

Като го гледам обаче как почва маи е Verilog ....

Та ... за да разберете кво праи, съответно ще ви трябва някои кото разбира от гореспоменатите езици да го разчете. (това е най лесния начин)

Втория начин е да зяпаш симулацията на тоя код с MXE(симулатор) на WebPack ... и да се мъчиш да разбереш кво става .... :)

Ако искаш качи го тоз код тука ... да го поразгледам (само да не е много дълак че ме мързи много ....) и ще се опитам да ти нахвърля в основни линий кво праи .... ;) /ако е на Verilog де ... ама предполагам че е тва/

_________________
От наше село са види връо, ама от връо се невиди наше село ... що така и я незнам .. ?!?


Чет Авг 18, 2005 12:09 pm
Профил ICQ WWW
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Яну 26, 2005 2:01 pm
Мнения: 1952
Местоположение: Варна
Мнение 
В такъв случай ако имаш сорс код. Може да ти се сглоби един проект в WebPack. А там може да се генерира схема от този сорс( имам в предвид по-новите версии на WebPack, 6.2 например става). И да разглеждаш нещо по разбираемо от Verilog или VHDL.


Чет Авг 18, 2005 12:38 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Вто Юни 07, 2005 6:20 pm
Мнения: 3532
Мнение 
Verilog е. Пише го в началото на файла (то всъщност не е отделен файл, ами част от .DOC, където е и другата документация за схемата).

Тегля сега на работа WebPack 7.1i (ако не се лъжа...) само че е малко големичко (380MB) 8O .
Гледам там има някакъв ъпдейт ли, servicе pack ли не помня, и той 300MB. Ще ми трябва ли?

В понеделник ще постна целия сорс (две страници е май...), макар че може и да се окаже че не е чак толкова сложно нещо...


Съб Авг 20, 2005 9:04 pm
Профил
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Пон Юли 04, 2005 11:51 pm
Мнения: 651
Местоположение: София
Мнение 
Хехе .. абре в 2 старници може да се опише бая сложничко нещо ... :)

По добре си сложи вер.6.1 ... по лека е и се държи стабилно ... задължително си свали и сервиз-пакета ...

Аре .. като постнеш кода ще видим кво е тва чудо ... ;)

_________________
От наше село са види връо, ама от връо се невиди наше село ... що така и я незнам .. ?!?


Съб Авг 20, 2005 9:12 pm
Профил ICQ WWW
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Яну 26, 2005 2:01 pm
Мнения: 1952
Местоположение: Варна
Мнение 
От Петрекс можеха да ти го пратят на диск. Аз лично работя с 6.2 защото чувам че хората имат проблеми с тоя 7.1 Така че както казва и BrainStorm СервисПака - задължително.


Съб Авг 20, 2005 10:34 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Вто Юни 07, 2005 6:20 pm
Мнения: 3532
Мнение 
Хм, не било 2 страници, малко повечко

Edb.v Verilog Source Code

module edb(
bsdcs,
read,
mcdaen,
mcdir,
brd,
bbdqm,
bdqm,
bsdwe,
bresetn,
cpld_clk,
int_boot,
ext_boot,
nor_boot,
ser_boot,
func_test,
tic_test,
para_test,
scan_test,
eeclk,
eedat,
ntest1,
ntest0,
bwr,
bras,
bcas,
waitb,
bad,
bda,
io,
ioclk
);

input [2:1] bsdcs;
input mcdir;
input bsdwe;
input brd;
input bwr;
input bras;
input bcas;
input waitb;

input mcdaen;
input [3:0] bdqm;
output [3:0] bbdqm;
output read;
input bresetn;

input cpld_clk;
input eeclk;
input eedat;
input ntest1;
input ntest0;
input [3:0] bad;
input [7:0] bda;


output int_boot;
output ext_boot;
output nor_boot;
output ser_boot;
output func_test;
output tic_test;
output para_test;
output scan_test;
output [15:0] io;
output ioclk;

//output outdummya;

reg r_ext_boot ; assign ext_boot = r_ext_boot;
reg r_int_boot ; assign int_boot = r_int_boot;
reg r_nor_boot ; assign nor_boot = r_nor_boot;
reg r_ser_boot ; assign ser_boot = r_ser_boot;
reg r_func_test; assign func_test = r_func_test;
reg r_tic_test ; assign tic_test = r_tic_test;
reg r_para_test; assign para_test = r_para_test;
reg r_scan_test; assign scan_test = r_scan_test;
reg r_first_pass_detect;

always @(posedge cpld_clk or negedge bresetn)
begin
if(!bresetn)
begin
r_ext_boot = 1'b0;
r_int_boot = 1'b0;
r_nor_boot = 1'b0;
r_ser_boot = 1'b0;
r_func_test = 1'b0;
r_tic_test = 1'b0;
r_para_test = 1'b0;
r_scan_test = 1'b0;
r_first_pass_detect = 1'b1;
end
else
begin
if(!eeclk && r_first_pass_detect)
r_ext_boot = 1'b1;

if(eeclk && r_first_pass_detect)
r_int_boot = 1'b1;

if(eedat && !ntest1 && !ntest0&& r_first_pass_detect)
r_nor_boot = 1'b1;

if(eedat && !ntest1 && ntest0&& r_first_pass_detect)
r_ser_boot = 1'b1;

if(eedat && ntest1 && !ntest0&& r_first_pass_detect)
r_func_test = 1'b1;

if(eedat && ntest1 && ntest0&& r_first_pass_detect)
r_tic_test = 1'b1;

if(!eedat && !ntest1 && !ntest0&& r_first_pass_detect)
r_para_test = 1'b1;

if(!eedat && !ntest1 && ntest0&& r_first_pass_detect)
r_scan_test = 1'b1;

r_first_pass_detect = 1'b0;
end
end

wire bufsdramsel = (!bsdcs[1] & !bsdcs[2]) ? 1'b1 : 1'b0;
//wire read;
assign read = ((!mcdir & !mcdaen) | (!brd & mcdaen) | ( bsdwe & bufsdramsel)) ? 1'b0 : 1'b1;

assign bbdqm[0] = ((!bdqm[0] & mcdaen) | (bdqm[0] & !mcdaen)) ? 1'b0 : 1'b1;
assign bbdqm[1] = ((!bdqm[1] & mcdaen) | (bdqm[1] & !mcdaen)) ? 1'b0 : 1'b1;
assign bbdqm[2] = ((!bdqm[2] & mcdaen) | (bdqm[2] & !mcdaen)) ? 1'b0 : 1'b1;
assign bbdqm[3] = ((!bdqm[3] & mcdaen) | (bdqm[3] & !mcdaen)) ? 1'b0 : 1'b1;

assign io[2:0] = bad[2:0];
assign io[3] = bwr;
assign io[4] = r_first_pass_detect;
assign io[5] = bras;
assign io[6] = bcas;
assign io[7] = waitb;
assign io[15:8] = bda[7:0];
assign ioclk = bad[3];
endmodule

Е те 'тва е.
Сори за дългия пост :roll:


Пон Авг 22, 2005 10:26 am
Профил
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Пон Юли 04, 2005 11:51 pm
Мнения: 651
Местоположение: София
Мнение 
Уф .... малко ме стресна в началото като ги зърнах тез 30'тина i/o'та ;)

Та .... значи ето кратко описание на тва кво прави това чудо:

Като гледам маи се използа само за споиваща логика ... бихте могли да го замените и с ТТЛ'ки ама ще ви трябват бая ... (около 40'тина)

Както се вижда от предварителната декларация тва чудо има 30 порта, кои е вход и кои изход мисля че се подразбира, това във

скобите [x : x] показва че съответния и/о е шина с дължина 'Н' бита


input [2:1] bsdcs; // това например е дълго 3 бита
input mcdir;
input bsdwe;
input brd;
input bwr;
input bras;
input bcas;
input waitb;

input mcdaen;
input [3:0] bdqm; // това 4бита и т.н.т
output [3:0]
bbdqm;
output read;
input bresetn;

input cpld_clk;
input eeclk;
input eedat;
input ntest1;
input ntest0;
input [3:0] bad;
input [7:0] bda;


output int_boot;
output ext_boot;
output nor_boot;
output ser_boot;
output func_test;
output tic_test;
output para_test;
output scan_test;
output [15:0] io;
output ioclk;

После следва същинската дефиниция на на функцията на CPLD'то

always @(posedge cpld_clk or negedge bresetn)
begin
if(!bresetn)
begin
r_ext_boot = 1'b0;
r_int_boot = 1'b0;
r_nor_boot = 1'b0;
r_ser_boot = 1'b0;
r_func_test = 1'b0;
r_tic_test = 1'b0;
r_para_test = 1'b0;
r_scan_test = 1'b0;
r_first_pass_detect = 1'b1;
end
else
begin


if(eeclk && r_first_pass_detect)
r_int_boot = 1'b1;

if(eedat && !ntest1 && !ntest0&& r_first_pass_detect)
r_nor_boot = 1'b1;

if(eedat && !ntest1 && ntest0&& r_first_pass_detect)
r_ser_boot = 1'b1;

if(eedat && ntest1 && !ntest0&& r_first_pass_detect)
r_func_test = 1'b1;

if(eedat && ntest1 && ntest0&& r_first_pass_detect)
r_tic_test = 1'b1;

if(!eedat && !ntest1 && !ntest0&& r_first_pass_detect)
r_para_test = 1'b1;

if(!eedat && !ntest1 && ntest0&& r_first_pass_detect)
r_scan_test = 1'b1;

r_first_pass_detect = 1'b0;
end
end

Горе написаното ще рече нещо от сорта ...
При преминаване от 0->1 на сигнала cpld_clk или преминаване от 1->0 на сигнала breset се случва следното ..

Ако breset == 0 (синхронен ресет) сигналите:


r_ext_boot
r_int_boot
r_nor_boot
r_ser_boot
r_func_test
r_tic_test
r_para_test
r_scan_test

се установяват в в ниво '0' асигнала r_first_pass_detect в ниви '1'.

Ако breset == 1 то тогава се случва следното:

сигнала r_first_pass_detect се установява в ниво '0' и ...


if(!eeclk && r_first_pass_detect) // ако условието е изпълнено
r_ext_boot = 1'b1; // r_ext_boot = 1 .. в противен случеи запазва предишното си ниво

if(eedat && !ntest1 && !ntest0&& r_first_pass_detect) // ..............
r_nor_boot = 1'b1; // ..............

if(eedat && !ntest1 && ntest0&& r_first_pass_detect) // ..............
r_ser_boot = 1'b1; // ..............

if(eedat && ntest1 && !ntest0&& r_first_pass_detect) // ..............
r_func_test = 1'b1; // ..............

if(eedat && ntest1 && ntest0&& r_first_pass_detect) // ..............
r_tic_test = 1'b1; // ..............

if(!eedat && !ntest1 && !ntest0&& r_first_pass_detect) // ..............
r_para_test = 1'b1; // ..............

if(!eedat && !ntest1 && ntest0&& r_first_pass_detect) // ..............
r_scan_test = 1'b1; // ..............

Така едно допълнение ... това по горе беше синхронната част от модула .. т.е всички промени по гореспоменатите сигнали се случват синхронно при положителен фронт на сигнала cpld_clk.

В останалата по доло чат от модула нещата се случват асинхронно .... /тип wire/


wire bufsdramsel = (!bsdcs[1] & !bsdcs[2]) ? 1'b1 : 1'b0; // тук се декларира един вътрешен сигнал bufsdramsel, ако условието (!bsdcs[1] & !bsdcs[2]) е изпълнено то този сигнал придобива стоиност 1 в противен случеи е 0


//wire read;
assign read = ((!mcdir & !mcdaen) | (!brd & mcdaen) | ( bsdwe & bufsdramsel)) ? 1'b0 : 1'b1; // тук се присвоява стоиност на сигнала read ... ако условието
((!mcdir & !mcdaen) | (!brd & mcdaen) | ( bsdwe&bufsdramsel)) .... /забележи че като аргумент се ползва и стоиноста на горедекларирания сигнал/ .... е изпълнено този то тогава на read се присвоява стоиност 0 в противен случеи е равен на 1


assign bbdqm[0] = ((!bdqm[0] & mcdaen) | (bdqm[0] & !mcdaen)) ? 1'b0 : 1'b1; // на бит 0 от шината bbdqm се присвоява инвертираната стоиност на условието ((!bdqm[0] & mcdaen) | (bdqm[0] & !mcdaen))
assign bbdqm[1] = ((!bdqm[1] & mcdaen) | (bdqm[1] & !mcdaen)) ? 1'b0 : 1'b1; // на бит 1 ..............................
assign bbdqm[2] = ((!bdqm[2] & mcdaen) | (bdqm[2] & !mcdaen)) ? 1'b0 : 1'b1; // на бит 2 ..............................
assign bbdqm[3] = ((!bdqm[3] & mcdaen) | (bdqm[3] & !mcdaen)) ? 1'b0 : 1'b1; // на бит 3 ..............................

assign io[2:0] = bad[2:0]; // на битове 2 до 0 от шината io се присвоява стоиноста на битове 2 до 0 от шината bad
assign io[3] = bwr; // на бит 3 от щината i/o се присвоява стоиноста на bwr
assign io[4] = r_first_pass_detect; // на бит 4 от щината i/o се присвоява стоиноста на r_first_pass_detect
assign io[5] = bras; // на бит 5 от щината i/o се присвоява стоиноста на bras
assign io[6] = bcas; // на бит 6 от щината i/o се присвоява стоиноста на bcas
assign io[7] = waitb; // на бит 7 от щината i/o се присвоява стоиноста на waitb
assign io[15:8] = bda[7:0]; // на битове 15 до 8 от шината io се присвоява стоиноста на битове 7 до 0 от шината bda
assign ioclk = bad[3]; // на сигнала ioclk се присвоява стоиноста на бит 3 от сигнала bad


Еми това е ... :)


Както казах, единствената функция на тва CPLD в случея е да бъде ползвано като 'споиваща логика' ... да ти кажа аз бих ти препоръчал да не "карате без него" .. ;) много ще си осложните живота ако го направите тва с ТТЛ'ки ...

_________________
От наше село са види връо, ама от връо се невиди наше село ... що така и я незнам .. ?!?


Пон Авг 22, 2005 2:01 pm
Профил ICQ WWW
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Яну 26, 2005 2:01 pm
Мнения: 1952
Местоположение: Варна
Мнение 
За какви ТТЛ-ки става въпрос :?: :?: :?:
Това е CoolRunner с под 100mA консумация на 100MHz, макс. propagation delay time 10ns, за размерите да не говорим...


Пон Авг 22, 2005 5:49 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Вто Юни 07, 2005 6:20 pm
Мнения: 3532
Мнение 
r_ext_boot
r_int_boot
r_nor_boot
r_ser_boot
r_func_test
r_tic_test
r_para_test
r_scan_test

са изходи за индикация - има свързани светодиоди към тях.
Съвсем спокойно все едно ги няма... Опростява ли това нещата? (ще взема да навляа в тези програмируеми логики май, явно сега му дойде времето :? )

Между другото дръпнах си WebPack-a, ама не мога да се оправя нещо. Има ли начин да се види това като схема от тип тригери, логики (двувходови, тривходови...) и т.н.?

Иначе под ТТЛ предполагам имаше предвид дискретни логики.
Аз си мисля че дори да не можем да минем без това CPLD, бихме могли да сложим някакво по-малко и по-евтино. 100 извода са прекалено много за това което върши май... :?
Как мислите?


Вто Авг 23, 2005 11:19 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Яну 26, 2005 2:01 pm
Мнения: 1952
Местоположение: Варна
Мнение 
Ето това е схема на най-горното ниво генерирана със WEbPack6.2. В Project Navigator процеса който я генерира се казва "View RTL Schematic". Избрали са XCR3064 защото на XCR3032 не му достигат 2 изходни пина. Той има 28 а са необходими 30 за този проект. Вътре в матрицата ресурсите са заети по-малко от половината така че ако отпаднат някои от сигналите излизащи навън смятам, че ще се побере и в XCR3032. Но за това ... наистина май е дошъл момента да навлезеш в програмируемите логики.
Ако този вид на схемата те устройва и имаш проблеми с генерирането и обади се като се поосвободя малко довечера мога да ти изпратя и схемите на по-долните нива - блокчетата от тази схема.


Прикачени файлове:
RTLsch.pdf [14.67 KiB]
429 пъти
Вто Авг 23, 2005 12:45 pm
Профил
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Пон Юли 04, 2005 11:51 pm
Мнения: 651
Местоположение: София
Мнение 
Мда .. определено може да го поберете в нещо по компактно ... 48 пинов корпус ... 32 макроклетки (ХС9532 например ... цената му е около 1.3$)

Иначе относно WepPack .... създаваш нов проект ... прибавяш фаиловете .. и му даваш да ги синтезира .. така дирекно се създава и схема на проекта която можеш да си разглеждаш .....

Ето тук има едно кратко туториалче с картинки ;)

http://www.fpga4fun.com/ISEQuickStart.html

.... стъпка по стъпка се обяснява как да създадеш и компилираш проект ... за да видиш схемата след като компилираш проекта щракаш на "View RTL Schematic" .

_________________
От наше село са види връо, ама от връо се невиди наше село ... що така и я незнам .. ?!?


Вто Авг 23, 2005 12:46 pm
Профил ICQ WWW
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 33 мнения ]  Отиди на страница 1, 2, 3  Следваща

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 4 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни