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

Re: вопросы по Verilog

Ср дек 19, 2012 09:27:49

Вы по-ходу даже сами не представляете, что просите...

Re: вопросы по Verilog

Ср дек 19, 2012 10:08:57

Ну смотрите.Ситуация такая. Стоит шкаф и работает.Выходит модуль из строя и его надо заменить "на горячую". как это сделать так,чтобы при смене модуля ложная информация с него не считывалась,а считывалась только достоверная?

Re: вопросы по Verilog

Ср дек 19, 2012 10:18:17

Это Вы меня спрашиваете?) Откуда я знаю какой это модуль????:))
И вообще, если модуль вышел из строя, то из него заведомо не могут идти не ложные данные. Зачем тогда его заменять, если из него идут верные данные?)))

Re: вопросы по Verilog

Ср дек 19, 2012 10:23:43

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

модули стоят в крейте обмениваются по шине SPI.

Re: вопросы по Verilog

Ср дек 19, 2012 10:45:54

во-первых, тема про Verilog, а Вы уже что-то другое обсуждать начали
во-вторых, телепаты в отпуске, Вашу проблему надо решать в комплексе.

Re: вопросы по Verilog

Ср дек 19, 2012 10:47:35

ну я думаю сделать регистр, в который записать идентификатор модуля. Периодически его читать. Если считанное не совпадает с тем что предполагает считать шкаф,то косяк, но некоторые биты будут теряться все равно.

Re: вопросы по Verilog

Чт дек 27, 2012 08:18:03

Помогите пожалуйста переписать код с AHDL на Verilog


CASE RES_SV IS
WHEN B"1" => RES_CASE = VCC;
WHEN B"x" => RES_CASE = VCC;
WHEN B"0" => RES_CASE = GND;
END CASE;

RESET=RES AND RES_CASE;

Re: вопросы по Verilog

Пт фев 01, 2013 08:20:11

Надеюсь,что кто-то поможет.

Вот что было на AHDL.

Код:
SUBDESIGN 16OUTS
(
   WR       : INPUT;
   RESET    : INPUT;
   RD       : INPUT;
   CS       : INPUT;
   DAT[7..0]: BIDIR;
   A[3..0]    : INPUT;
   OUT[15..0]: OUTPUT;
)
VARIABLE
 IN_REG[15..0]: LATCH;
 D[7..0]    : NODE;   
BEGIN
  D[7..0] = (32&(A[3..0]==0))#
          (21&(A[3..0]==1))#
          (16&(A[3..0]==2))#
          (8&(A[3..0]==3))#
          (0&(A[3..0]==4))#
          (0&(A[3..0]==5))#
          (0&(A[3..0]==6))#
          (0&(A[3..0]==7))#
          (IN_REG[7..0]&(A[3..0]==8))#
          (IN_REG[15..8]&(A[3..0]==9));
 
   DAT0 = TRI(D0,!CS&!RD);
   DAT1 = TRI(D1,!CS&!RD);
   DAT2 = TRI(D2,!CS&!RD);
   DAT3 = TRI(D3,!CS&!RD);
   DAT4 = TRI(D4,!CS&!RD);
   DAT5 = TRI(D5,!CS&!RD);
   DAT6 = TRI(D6,!CS&!RD);
   DAT7 = TRI(D7,!CS&!RD);

   IN_REG[15..8].D = DAT[7..0]&RESET;
   IN_REG[7..0].D  = DAT[7..0]&RESET;
   
   IN_REG[7..0].ENA  =  (!CS&!WR&(A[]==8))#!RESET;
   IN_REG[15..8].ENA =  (!CS&!WR&(A[]==9))#!RESET;

   OUT[] = !IN_REG[];

END;




вот как я написал :

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

   reg [7:0] D;
   reg [15:0] INREG;
   
   always @(negedge RD or negedge WR) 
   case (A)
   4'b0000:    D <= 8'b00100000;
   4'b0001:    D <= 8'b00010101;       
   4'b0010:    D <= 8'b00010000;     
   4'b0011:    D <= 8'b00001000;
   4'b1000:    D <= INREG[7:0];
   4'b1001:    D <= INREG[15:8];
   default:    D = 8'b00000000;
   endcase                   

   always @(negedge WR or negedge RES)
begin
   if (RES == 0)
        INREG <= 0;
    else if ((!CS && !WR && A == 4'b1000)||!RES)
        INREG[7:0] <= DAT;
    else if ((!CS && !WR && A == 4'b1001)||!RES)
        INREG[15:8] <= DAT; 
end   

  assign DAT[7:0]=(!CS&!RD)?D[7:0]:8'bz;
 
  assign OUT[15:0]=!INREG[15:0];

  endmodule




и все равно не хочет работать. Может дело в этом триггере-защелке LATCH? но я не нашел как описать этот LATCH на верилоге.

Re: вопросы по Verilog

Пт фев 01, 2013 09:56:57

Похоже, что речь идёт о том, что называется transparent latch. Их надо отдельно делать.
Код:
always @(d, g)
begin: latch
    if (g == 1)
    begin
        q <= d;
    end
end

Или так

reg out;
always @(gate or din)
  if(gate)
    out = din;
Как-то так. С синтаксисом мог ошибиться, но идея такая.

Вот ещё, может кому пригодиться: http://eesun.free.fr/DOC/VERILOG/synvlg.html

Re: вопросы по Verilog

Пт фев 01, 2013 10:08:45

у меня это будет как-то так?


Код:
 always @(A==8 or  A==9)
begin
   if (A==8)
 INREG[7:0] <= DAT; 
    else if ((!CS && !WR && A == 4'b1001)||!RES)
        INREG[15:8] <= DAT; 


тогда не будет условия при RES==0


или это будет так?

Код:
  always @(A==8 or  INREG)
begin
   if (A==8)
 INREG[7:0] <= DAT;
else if
INREG<=0; 

  always @(A==9 or  INREG)
begin
   if (A==9)
 INREG[15:8] <= DAT;
else if
INREG<=0; 


или чего я не понимаю?

Re: вопросы по Verilog

Пт фев 01, 2013 10:27:20

Просто по ссылке,которую вы скинули,я нашел раздел Latches.


Там описан триггер, с разрешающим входом ,обычным входом и выходом.

У меня та же ситуация, только у меня 2 разрешающих входа получается, при А=8 и А=9.Я не понимаю как это описать.Что при 8 он пропускает одну часть сигналов,а при 9 другую.

Re: вопросы по Verilog

Пт фев 01, 2013 10:31:17

AHDL не знаю. Посему не понимаю, что вам надо получить.
Посмотрите как сделан latch по ссылке что я дал.
Вам надо сделать присвоение значения, когда выполняется заданное условие. Когда условие не выполняется, то делать ничего не надо.

Добавил:
Т.е. вы сами не понимаете, что делает первый кусок кода!?
Так вы разберитесь, что исходный код делает! Выпишете "пути данных", условия. Схему на обычной логике нарисуйте, в крайнем случае. Чтобы вы сами поняли. А потом уже переписывайте на другом языке.

Re: вопросы по Verilog

Пт фев 01, 2013 10:48:17

да,я понимаю впринципе,что он делает. раньше писал на AHDL(не до конца изучив язык). Щас уже перехожу на Verilog(от меня это потребовали).И вот прочитал про этот триггер-защелку.

думаю будет так,пока другого ничего в голову не приходит почему-то.
Код:
reg INREG;

always @(!CS&&!WR&& A==8 or INREG[7:0])

if (!CS&&!WR&& A==8)
INREG[7:0]=DAT[7:0];

always @(!CS&&!WR&& A==9 or INREG[15:8])

if (!CS&&!WR&& A==9)
INREG[15:8]=DAT[7:0];


такой код имеет смысл?)

Re: вопросы по Verilog

Пт фев 01, 2013 11:09:34

Nevox писал(а):такой код имеет смысл?)
Ну, в общем, наверно - да. :)

Re: вопросы по Verilog

Пт фев 01, 2013 12:25:09

Error: Can't route source node "INREG[9]~98" of type max_mcell to destination node "Mux6~6" of type max_mcell
Error: Can't route source node "INREG[9]~98" of type max_mcell to destination node "INREG[9]~98" of type max_mcell
Error: Can't route source node "INREG[9]~98" of type max_mcell to destination node "INREG[9]~145" of type max_mcell
Error: Can't route source node "INREG[9]~98" of type max_mcell to destination node "WideNor0~0" of type max_mcell
Error: Can't place node "INREG[9]~145" of type max_mcell
Error: Can't find fit
Error: Quartus II Fitter was unsuccessful. 6 errors, 7 warnings
Error: Peak virtual memory: 400 megabytes
Error: Processing ended: Fri Feb 01 13:28:41 2013
Error: Elapsed time: 00:00:01
Error: Total CPU time (on all processors): 00:00:01
Error: Quartus II Full Compilation was unsuccessful. 8 errors, 38 warnings


при таком коде выдает вот такие ошибки...

это означает,что не хватает макроячеек и надо писать как-то еще хитрее и проще?

Re: вопросы по Verilog

Пт фев 01, 2013 13:32:01

Чёт намудрил. Зачем INREG в always?
Код:
reg INREG;
always @(CS or WR or A or DAT)
begin
    if (!CS&&!WR&& A==8)
    INREG[7:0]=DAT[7:0];
end

always @(CS or WR or A or DAT)
begin
    if (!CS&&!WR&& A==9)
    INREG[15:8]=DAT[7:0];
end


ЗЫ: Чёт давненько я на верилоге ничего не делал. Подзабыл уже. :)

Re: вопросы по Verilog

Пт фев 01, 2013 13:35:18

а я по примеру делал)

Код:
reg q;

always @ (q or enable)
   if (enable)
      q = d;



как здесь,по аналогии и сделал...

щас попробую этот код

upd. А тоже самое пишет,та же ошибка.

Re: вопросы по Verilog

Пт фев 01, 2013 13:38:52

Для какой ПЛИС?

Re: вопросы по Verilog

Пт фев 01, 2013 13:43:26

ALTERA EMP 3064 ATC 100-10

триггеров должно хватить поидее.

Re: вопросы по Verilog

Пт фев 01, 2013 17:38:30

Nevox писал(а):триггеров должно хватить поидее.
Макроячейки задействуются не только на регистры из "схемы", но и на выводы (pin-ы) работающие на выход. А может просто не хватить ресурсов внутренней шины на разводку между макроячейками.
Ответить