Программируемая логика - это не так уж и сложно. Разберемся вместе.
Ответить

Проблема с квартусом

Ср фев 27, 2013 11:16:51

Здравствуйте,хотел бы узнать.Есть модуль вывода. есть прошивка на верилоге ,она работает все хорошо.Но ,когда я вставляю модуль "на горячую" в крейт все лампочки зажигаются(ну или какая-то часть)такого быть не должно... Проблема в квартусе? может я опцию какую не включаю или еще чего? или все-таки в железе?


Код:
module D3 (WR,RES,RD,CS,DAT,A,OUT,PWR);
   input RES;
   input wire [3:0] A;
   input wire WR, RD, CS,PWR;
   inout wire [7:0] DAT;
   output wire [8:1] OUT;

   reg [7:0] D;
   reg [8:1] INREG;
   
   always @(negedge RD or negedge WR) 
   case (A)
   4'b0000:    D <= 8'b00100000;
   4'b0001:    D <= 8'b00010110;       
   4'b0010:    D <= 8'b00001000;     
   4'b0011:    D <= 8'b00001000;
   4'b0100:    D <= 8'b00001001;
   4'b1000:    D <= INREG;
   4'b1010:    D <= {4'b0, PWR, 3'b001};
   default:    D = 8'b00000000;
   endcase                   

   always @(negedge WR or negedge RES)
begin
   if (RES == 0)
        INREG <= 0;
    else if (!CS && A == 8)
        INREG <= DAT;
end   

  assign DAT[7:0]=(!CS&!RD)?D[7:0]:8'bz;
 
  assign OUT[1]=(INREG[1])?8'b0:8'bz;
  assign OUT[2]=(INREG[2])?8'b0:8'bz;
  assign OUT[3]=(INREG[3])?8'b0:8'bz;
  assign OUT[4]=(INREG[4])?8'b0:8'bz;
  assign OUT[5]=(INREG[5])?8'b0:8'bz;
  assign OUT[6]=(INREG[6])?8'b0:8'bz;
  assign OUT[7]=(INREG[7])?8'b0:8'bz;
  assign OUT[8]=(INREG[8])?8'b0:8'bz;
 
  endmodule
           


может можно как-то задать начальное значение пинов или что-нибудь такое. Микросхема Altera EPM3064 44/10

Re: Проблема с квартусом

Ср фев 27, 2013 14:55:22

Единственное, что можно посоветовать - добавьте на плату супервизор питания, который будет генерировать сигнал сброса. Его соответственно, нужно подать на CPLD, и по этому сигналу устанавливать начальное состояние. Квартус тут совсем не при чем.

Re: Проблема с квартусом

Ср фев 27, 2013 14:57:17

вот хотелось бы решить эту проблему на программном уровне,если можно)

Re: Проблема с квартусом

Ср фев 27, 2013 17:39:12

Вы на горячую вставляете и у вас шум/дребезг контактов идёт пока не вставилось. Либо снаружи сброс с задержкой, как уже предложили. Либо таймер в ПЛИС. Но что-то кажется мне, что это "не айс".

Re: Проблема с квартусом

Ср фев 27, 2013 22:02:40

Kavka писал(а): Либо таймер в ПЛИС.

Есть такая техника, однако для этого нужен вход внешнего клока (генератора).
Предположим, что такой клок есть и имя его clk
Код:
input clk;

wire reset;
reg[15:0] count;

reset = (count < 16'hFFFF);
 
always @(posedge clk) if(reset) count <= count+1'b1;



reset будет в состоянии 1, пока счетчик не "отмолотит" 65536 тактов, потом сбросится в 0. Однако этот код сожрет 16 логических ячеек, что для данной CPLD может быть проблемой. Можно, конечно, уменьшить разрядность счетчика count, тут все зависит от частоты клока и желаемого времени задержки.
PS: Идея, я думаю, понятна - остальное в Ваших руках. Однако решение с супервизором питания гораздо более простое и правильное.

Re: Проблема с квартусом

Чт фев 28, 2013 07:10:52

Спасибо,попробую,в магистрали должна быть бегающая частота)Надо проверить)
Ответить