5-Microstep Drive. Xilinx CPLD
НЕМНОГО теории Верилога, и присланный проект компилится без ошибок.
Лег в EPM3064, занял 64% - как будет работать посмотрим на праздниках.
А где то можно глянуть ?
А где то можно глянуть ?
***** Project compilation was successful
** DEVICE SUMMARY **
Chip/ Input Output Bidir Shareable
POF Device Pins Pins Pins LCs Expanders % Utilized
ustep EPM3064ALC44-4 7 8 1 41 13 64 %
User Pins: 7 8 1
Project Information c:\maxplus2\maxwork\g900m\ustep.rpt
** AUTO GLOBAL SIGNALS **
INFO: Signal ‘CLK’ chosen for auto global Clock
Project Information c:\maxplus2\maxwork\g900m\ustep.rpt
** PIN/LOCATION/CHIP ASSIGNMENTS **
Actual
User Assignments
Assignments (if different) Node Name
ustep@4 AIN
ustep@40 ASIN
ustep@8 A0
ustep@9 A1
ustep@5 BIN
ustep@11 BSIN
ustep@12 B0
ustep@14 B1
ustep@43 CLK
ustep@6 DIR
ustep@16 DUMP
ustep@2 OSCA
ustep@18 OSCB
ustep@1 RES
ustep@19 STBY
ustep@41 STP
Project Information c:\maxplus2\maxwork\g900m\ustep.rpt
***** Project compilation was successful
Project Information c:\maxplus2\maxwork\g900m\ustep.rpt
а сам проект глянуть можно ? 😃
>> а сам проект глянуть можно ? 😃 Если Автор не против, то можно.
А прочитать первое сообщение в этой теме слабо? Там кстати и код выложен один к одному как я Юрию переслал.
Для самых ленивых код ниже.
Юрий, обратите внимание на STBY. Тут он несколько по другому сформирован. Вы не пробовали смотреть на STBY and DUMP в симуляции. Каждые 400us что-то выдается на STBY или код еще сыроват, хоть и работает?
Вместо смайликов надо подставить B )
Пробела между ними не должно быть.
`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
// Company:
// Engineer: Oleg
//
// Create Date: 09:45:02 11/04/2009
// Design Name:
// Module Name: uStep
// Project Name:
// Target Devices: XC2C64A-7VQ44C
// Tool versions:
// Description: 80V 8A Stepper Motor Drive
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
//////////////////////////////////////////////////////////////////////////////////
module uStep(
input CLK, AIN, BIN, DIR, STP, OSCA, RES,
inout STBY,
output ASIN, BSIN, DUMP, A0, A1, B0, B1, OSCB-);
wire [2:0] QA;
wire [7:0] QB;
wire [1:0] QC;
wire [2:0] QD;
//T_BASE--------------------------------------------------------------------------
CB8R C03 (.C(CLK), .R(G14), .Q(QB-));
DF F12 (.C(CLK), .D(G24), .R(0), .CE(1), .S(~STBY), .Q(Q12));
assign DUMP = ~Q12 ? 1’bz : 1’b0;
assign G24 = QB[7] & QB[6] & QB[5] & QB[4];
assign OSCB = ~OSCA;
//PH_GEN--------------------------------------------------------------------------
DF F02 (.C(CLK), .D(~DIR), .R(0), .S(0), .CE(G16), .Q(Q02));
DF F03 (.C(CLK), .D(~STP), .R(0), .S(0), .CE(1), .Q(Q03));
DF F04 (.C(CLK), .D(Q03), .R(0), .S(0), .CE(1), .Q(Q04));
DF F05 (.C(CLK), .D(G16), .R(0), .S(0), .CE(1), .Q(Q05));
CB2BRE C00 (.C(CLK), .UD(Q02), .R(~RES), .CE(G14), .Q(QC));
CB3BRE C01 (.C(CLK), .UD(G13), .R(~RES), .CE(G15), .Q(QA));
CB3RE C02 (.C(CLK), .R(Q05), .CE(G18), .Q(QD));
assign G12 = QC[1] ^ QC[0];
assign G13 = QC[0] ^ Q02;
assign G11 = ( G13 & QA[2]) | (~G13 & ~QA[2] & ~QA[1] & ~QA[0]);
assign G14 = G11 & Q05;
assign G15 = ~G11 & Q05;
assign G16 = Q03 & ~Q04;
assign G17 = QD[2] & QD[1] & QD[0];
assign STBY = G17 ? 1’bz : 1’b0; //assign STBY = ~G17 ? 1’bz : 1’b0;
assign G18 = ~G17 & QB[7] & QB[6] & QB[5] & QB[4] & QB[3] &QB[2] & QB[1] & QB[0];
//SIN_COS-------------------------------------------------------------------------
DF F00 (.C(CLK), .D(G00), .R(G05), .S(0), .CE(1), .Q(Q00));
DF F01 (.C(CLK), .D(G10), .R(G05), .S(0), .CE(1), .Q(Q01));
assign G01 = QA[2] & ~QA[1] & ~QA[0] & QB[2] & QB[0];
assign G02 = ~QA[2] & QA[1] & QA[0] & QB[3] & QB[2] & QB[1] & QB[0];
assign G03 = ~QA[2] & QA[1] & ~QA[0] & QB[4] & QB[2] & QB[1] & QB[0];
assign G04 = ~QA[2] & ~QA[1] & QA[0] & QB[4] & QB[3] & QB[2] & QB[0];
assign G06 = ~QA[2] & ~QA[1] & ~QA[0] & QB[2] & QB[0];
assign G07 = ~QA[2] & ~QA[1] & QA[0] & QB[3] & QB[2] & QB[1] & QB[0];
assign G08 = ~QA[2] & QA[1] & ~QA[0] & QB[4] & QB[2] & QB[1] & QB[0];
assign G09 = ~QA[2] & QA[1] & QA[0] & QB[4] & QB[3] & QB[2] & QB[0];
assign G00 = Q00 | G01 | G02 | G03 | G04;
assign G10 = Q01 | G06 | G07 | G08 | G09;
assign G05 = ~QB[4] & ~QB[3] & ~QB[2] & ~QB[1] & ~QB[0];
assign BSIN = ~Q01 ? 1’bz : 1’b0;
assign ASIN = ~Q00 ? 1’bz : 1’b0;
//PH_DRV----------------------------------------
DF F06 (.C(CLK), .D(G20), .R(G19), .S(0), .CE(1), .Q(A0));
DF F07 (.C(CLK), .D(~G20), .R(G19), .S(0), .CE(1), .Q(A1));
DF F08 (.C(CLK), .D(G22), .R(G19), .S(0), .CE(1), .Q(B0));
DF F09 (.C(CLK), .D(~G22), .R(G19), .S(0), .CE(1), .Q(B1));
DF F10 (.C(CLK), .D(G21), .R(G24), .S(0), .CE(1), .Q(Q10));
DF F11 (.C(CLK), .D(G23), .R(G24), .S(0), .CE(1), .Q(Q11));
assign G19 = ~RES | (STBY & (QB[7] | QB[6]));
assign G22 = Q11 ^ QC[1]; //assign G22 = Q11 ^ QD[1];
assign G23 = Q11 | ~BIN;
assign G20 = Q10 ^ G12;
assign G21 = Q10 | ~AIN;
//the rest of the main module code here:
endmodule
/////////////////////////////////////////////////////////////////////////////////-
module DF (input D, C, CE, R, S, output Q);
reg df = 0;
always @(posedge C)
if ®
df <= 1’h0;
else if (S)
df <= 1’b1;
else if (CE)
df <= D;
assign Q = df;
endmodule
/////////////////////////////////////////////////////////////////////////////////-
module CB8R (input C, R, output [7:0] Q);
reg [7:0] count = 0;
always @(posedge C)
if ®
count <= 0;
else
count <= count + 1;
assign Q = count;
endmodule
/////////////////////////////////////////////////////////////////////////////////-
module CB2BRE (input UD, R, CE, C, output [1:0] Q);
reg [1:0] u_d = 0;
always @(posedge C)
if ®
u_d <= 0;
else if (CE)
if (UD) begin
u_d <= u_d + 1;
end
else begin
u_d <= u_d - 1;
end
assign Q = u_d;
endmodule
//////////////////////////////////////////////my add///////////////////////////////////-
module CB3BRE (input UD, R, CE, C, output [2:0] Q);
reg [2:0] u_d = 0;
always @(posedge C)
if ®
u_d <= 0;
else if (CE)
if (UD) begin
u_d <= u_d + 1;
end
else begin
u_d <= u_d - 1;
end
assign Q = u_d;
endmodule
////////////////////////////////////////corrected output [7:0]/////////////////////////////////////////-
module CB3RE (input C, R, CE, output [2:0] Q);
reg [2:0] count = 0;
always @(posedge C)
if ®
count <= 0;
else if (CE)
count <= count + 1;
assign Q = count;
endmodule
/////////////////////////////////////////////////////////////////////////////////-
А прочитать первое сообщение в этой теме слабо? Там кстати и код выложен один к одному как я Юрию переслал.
Я вообще то про проект на Алтере а не на Ксилинке. Товарищ писал что это ему удалось.
>>Марисс не возражает
😎
Вот это компилится Максом.
//`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
// Company:
// Engineer: Oleg
//
// Create Date: 09:45:02 11/04/2009
// Design Name:
// Module Name: uStep
// Project Name:
// Target Devices: XC2C64A-7VQ44C
// Tool versions:
// Description: 80V 8A Stepper Motor Driver
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
//////////////////////////////////////////////////////////////////////////////////
module uStep(CLK, AIN, BIN, DIR, STP, OSCA, RES,
STBY,
ASIN, BSIN, DUMP, A0, A1, B0, B1, OSCB-);
input CLK, AIN, BIN, DIR, STP, OSCA, RES;
inout STBY;
output ASIN, BSIN, DUMP, A0, A1, B0, B1, OSCB;
wire [2:0] QA;
wire [7:0] QB;
wire [1:0] QC;
wire [2:0] QD;
wire G01,G02,G03,G04,G05,G06,G07,G08,G09;
wire G11,G12;
wire G17;
//T_BASE--------------------------------------------------------------------------
CB8R C03 (.C(CLK), .R(G14), .Q(QB-));
DF F12 (.C(CLK), .D(G24), .R(0), .CE(1), .S(~STBY), .Q(Q12));
assign DUMP = ~Q12 ? 1’bz : 1’b0;
assign G24 = QB[7] & QB[6] & QB[5] & QB[4];
assign OSCB = ~OSCA;
//PH_GEN--------------------------------------------------------------------------
DF F02 (.C(CLK), .D(DIR), .R(0), .S(0), .CE(G16), .Q(Q02));
DF F03 (.C(CLK), .D(STP), .R(0), .S(0), .CE(1), .Q(Q03));
DF F04 (.C(CLK), .D(Q03), .R(0), .S(0), .CE(1), .Q(Q04));
DF F05 (.C(CLK), .D(G16), .R(0), .S(0), .CE(1), .Q(Q05));
CB2BRE C00 (.C(CLK), .UD(Q02), .R(~RES), .CE(G14), .Q(QC));
CB3BRE C01 (.C(CLK), .UD(G13), .R(~RES), .CE(G15), .Q(QA));
CB3RE C02 (.C(CLK), .R(Q05), .CE(G18), .Q(QD));
assign G12 = QC[1] ^ QC[0];
assign G13 = QC[0] ^ Q02;
assign G11 = ( G13 & QA[2]) | (~G13 & ~QA[2] & ~QA[1] & ~QA[0]);
assign G14 = G11 & Q05;
assign G15 = ~G11 & Q05;
assign G16 = Q03 & ~Q04;
assign G17 = QD[2] & QD[1] & QD[0];
assign STBY = ~G17 ? 1’bz : 1’b0;
assign G18 = ~G17 & QB[7] & QB[6] & QB[5] & QB[4] & QB[3] &QB[2] & QB[1] & QB[0];
//SIN_COS-------------------------------------------------------------------------
DF F00 (.C(CLK), .D(G00), .R(G05), .S(0), .CE(1), .Q(Q00));
DF F01 (.C(CLK), .D(G10), .R(G05), .S(0), .CE(1), .Q(Q01));
assign G01 = QA[2] & ~QA[1] & ~QA[0] & QB[2] & QB[0];
assign G02 = ~QA[2] & QA[1] & QA[0] & QB[3] & QB[2] & QB[1] & QB[0];
assign G03 = ~QA[2] & QA[1] & ~QA[0] & QB[4] & QB[2] & QB[1] & QB[0];
assign G04 = ~QA[2] & ~QA[1] & QA[0] & QB[4] & QB[3] & QB[2] & QB[0];
assign G06 = ~QA[2] & ~QA[1] & ~QA[0] & QB[2] & QB[0];
assign G07 = ~QA[2] & ~QA[1] & QA[0] & QB[3] & QB[2] & QB[1] & QB[0];
assign G08 = ~QA[2] & QA[1] & ~QA[0] & QB[4] & QB[2] & QB[1] & QB[0];
assign G09 = ~QA[2] & QA[1] & QA[0] & QB[4] & QB[3] & QB[2] & QB[0];
assign G00 = Q00 | G01 | G02 | G03 | G04;
assign G10 = Q01 | G06 | G07 | G08 | G09;
assign G05 = ~QB[4] & ~QB[3] & ~QB[2] & ~QB[1] & ~QB[0];
assign BSIN = ~Q01 ? 1’bz : 1’b0;
assign ASIN = ~Q00 ? 1’bz : 1’b0;
//PH_DRV----------------------------------------
DF F06 (.C(CLK), .D(G20), .R(G19), .S(0), .CE(1), .Q(A0));
DF F07 (.C(CLK), .D(~G20), .R(G19), .S(0), .CE(1), .Q(A1));
DF F08 (.C(CLK), .D(G22), .R(G19), .S(0), .CE(1), .Q(B0));
DF F09 (.C(CLK), .D(~G22), .R(G19), .S(0), .CE(1), .Q(B1));
DF F10 (.C(CLK), .D(G21), .R(G24), .S(0), .CE(1), .Q(Q10));
DF F11 (.C(CLK), .D(G23), .R(G24), .S(0), .CE(1), .Q(Q11));
assign G19 = ~RES | (STBY & (QB[7] | QB[6]));
assign G22 = Q11 ^ QC[1]; //assign G22 = Q11 ^ QD[1];
assign G23 = Q11 | ~BIN;
assign G20 = Q10 ^ G12;
assign G21 = Q10 | ~AIN;
//the rest of the main module code here:
endmodule
/////////////////////////////////////////////////////////////////////////////////-
module DF (D, C, CE, R, S, Q);
input D, C, CE, R, S;
output Q;
reg df;
always @(posedge C)
if ®
df <= 1’h0;
else if (S)
df <= 1’b1;
else if (CE)
df <= D;
assign Q = df;
endmodule
/////////////////////////////////////////////////////////////////////////////////-
module CB8R (C, R, Q);
input C, R;
output [7:0] Q;
reg [7:0] count;
always @(posedge C)
if ®
count <= 0;
else
count <= count + 1;
assign Q = count;
endmodule
/////////////////////////////////////////////////////////////////////////////////-
module CB2BRE (UD, R, CE, C, Q);
input UD, R, CE, C;
output [1:0] Q;
reg [1:0] u_d;
always @(posedge C)
if ®
u_d <= 0;
else if (CE)
if (UD) begin
u_d <= u_d + 1;
end
else begin
u_d <= u_d - 1;
end
assign Q = u_d;
endmodule
//////////////////////////////////////////////my add///////////////////////////////////-
module CB3BRE (UD, R, CE, C, Q);
input UD, R, CE, C;
output [2:0] Q;
reg [2:0] u_d;
always @(posedge C)
if ®
u_d <= 0;
else if (CE)
if (UD) begin
u_d <= u_d + 1;
end
else begin
u_d <= u_d - 1;
end
assign Q = u_d;
endmodule
////////////////////////////////////////corrected output [7:0]/////////////////////////////////////////-
module CB3RE (C, R, CE, Q);
input C, R, CE;
output [2:0] Q;
reg [2:0] count;
always @(posedge C)
if ®
count <= 0;
else if (CE)
count <= count + 1;
assign Q = count;
endmodule
/////////////////////////////////////////////////////////////////////////////////-
Вот это компилится Максом.
ага, пасиб, вижу что синтаксис чуть отличается, сейчас тоже в макс попробую засунуть
Анатолий, даже в самые отдаленные хутора пришла программируемая логика.
Пора начинать 😉
Пора начинать 😉
ну, то быстрее паяльник разогреет ? В)
Анатолий, даже в самые отдаленные хутора пришла программируемая логика.
Пора начинать 😉
Не, я сейчас все больше в Компасе - железяки пытаюсь изобретать, как ни противно это моей натуре.😁 Надеюсь, в январе что-нибудь начнут точить-фрезеровать, а я, тем временем, буду дальше грызть управляющую программу.
Так что до ПЛИС руки, боюсь, не скоро дойдут: нет у меня для них актуальной задачи, так чтобы без них - невмоготу.
Юрий, есть прогресс в моделировании?
Вот тут еще немножко теории как это сделано у Марисса.
Можете поделится кодом testbench для этого дела?
Что-то не могу разобраться как в ISE Project Navigator запускать симулятор (кажись wave называется).
Ткните пожалуйста пальцем куда смотреть надо и в какой последовательности.
луше сразу привыкайте к хорошему: Active HDL рулит.
луше сразу привыкайте к хорошему: Active HDL рулит.
Так вроде как и ModelsimXE с ISE работает без вопросов.
луше сразу привыкайте к хорошему: Active HDL рулит.
Cразу видно, человек КИТа начитался.
to mura
Юрий, так как насчет содержания моего поста
Юрий, есть прогресс в моделировании?
Вот тут еще немножко теории как это сделано у Марисса.
Можете поделится кодом testbench для этого дела?
Cкоро начну “боевые” испытания. А тесткод не писал, в МАКсе удобный симулятор, и там все задается графически.
Интерестно,как обстоят дела с драйвером…и подскажите boldive ,по Вашему мнению какой драйвер будет лучше: 1)на LS8290 или 2)на Xilinx CPLD
Разумеется на CPLD, только там код надо слегка до ума довести.
Ээээ… Народ, подскажите, нашел тут Xilinx ISE Design Suite v11.1 весит 5,6Гб и пакет обновлений до 11.4 2,5Гб Это чо неполная? В первых постах речь шла о 47Гб?
Все правильно. Так и есть. Только ко всему этому надо еще впридачу с сайта Xilinx скачать Modelsim 6.4 с библиотеками под CPLD (хотя по умолчанию там эти библиотеки уже сидят). Регистрационный код получите там-же бесплатно.