ysmat 0 12 января, 2016 Опубликовано 12 января, 2016 · Жалоба module avrout( input clock, input clk_avr, input ena_avr, input [12:0] FAZ, input [12:0] AMP, input [7:0] mode, output reg TX ); reg [39:0] TRIG; if (ena_avr) begin always @(posedge clk_avr) begin TX <= TRIG[0]; TRIG[0:38] <= TRIG[1:39]; TRIG[39] <= 0; end end else begin always @(posedge clock) begin TRIG[0:7] <= mode[7:0]; TRIG[8:20] <= FAZ[12:0]; TRIG[21] <= FAZ[12]; TRIG[22] <= FAZ[12]; TRIG[23] <= FAZ[12]; TRIG[24:36] <= AMP[12:0]; TRIG[37] <= 0; TRIG[38] <= 0; TRIG[39] <= 0; end end endmodule очень странная ругань компилятора Error (10170): Verilog HDL syntax error at avrout.v(32) near text "end"; expecting "endmodule" может always блок нельзя вставлять в условия if else Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iosifk 3 12 января, 2016 Опубликовано 12 января, 2016 · Жалоба if (ena_avr) begin always @(posedge clk_avr) begin ..... else begin always @(posedge clock) begin .... end end endmodule[/code] Вообще все это очень плохо. Вы под ena_avr коммутируете тактовую на входе регистра TRIG, причем не факт, что clk_avr и clock коммутируются без глитчей и метастабильности. На мой взгляд это совершенно бессмысленно, поскольку наверняка clk_avr намного медленнее, чем clock. А потому я рекомендую сделать CDC прямо на входе в ПЛИС по данным и по клоку от АВР... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ysmat 0 12 января, 2016 Опубликовано 12 января, 2016 · Жалоба ena_avr конечно медленнее основного clk суть какая по основному клоку происхоит паралельная загрузка в буфер когда ena_avr 1 тогда паралельная запись блокируеться и побитово выгружаеться в avr через avr_clk а как сделать по другому ? avr ведь может делать чтение абсолютно асинхронно в зависимости о загружености другими задачами Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Александр77 1 12 января, 2016 Опубликовано 12 января, 2016 · Жалоба Ловите состояния ena_avr и clk_avr стробируя тактовой частотой (clock). Тогда не придется мучиться с появлением сигналов Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iosifk 3 12 января, 2016 Опубликовано 12 января, 2016 · Жалоба а как сделать по другому ? avr ведь может делать чтение абсолютно асинхронно в зависимости о загружености другими задачами У меня на сайте "Краткий Курс", глава об асинхронных частотах. В момент прихода данных и клока от АВР пропускаете их через триггера под системный клок. Тоже и с ena_avr. И тогда останется только одна частота для обработки внутри ПЛИС... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ysmat 0 12 января, 2016 Опубликовано 12 января, 2016 · Жалоба Вообще все это очень плохо. Вы под ena_avr коммутируете тактовую на входе регистра TRIG, причем не факт, что clk_avr и clock коммутируются без глитчей и метастабильности. На мой взгляд это совершенно бессмысленно, поскольку наверняка clk_avr намного медленнее, чем clock. А потому я рекомендую сделать CDC прямо на входе в ПЛИС по данным и по клоку от АВР... always @(posedge clock) begin sinxr_avr_ena <= ena_avr; sinxr_clk_avr <= clk_avr; if (sinxr_avr_ena == 0) begin TRIG[0:7] <= mode[7:0]; TRIG[8:20] <= FAZ[12:0]; TRIG[21] <= FAZ[12]; TRIG[22] <= FAZ[12]; TRIG[23] <= FAZ[12]; TRIG[24:36] <= AMP[12:0]; TRIG[37] <= 0; TRIG[38] <= 0; TRIG[39] <= 0; end else begin if ((~sinxr_clk_avr & clk_avr)) begin TX <= TRIG[0]; TRIG[0:38] <= TRIG[1:39]; TRIG[39] <= 0; end end end endmodule переделал ругани нет завтра буду пробовать Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iosifk 3 12 января, 2016 Опубликовано 12 января, 2016 · Жалоба always @(posedge clock) begin sinxr_avr_ena <= ena_avr; sinxr_clk_avr <= clk_avr; ..... if ((~sinxr_clk_avr & clk_avr)) begin end endmodule переделал ругани нет завтра буду пробовать Теперь эти два места переделать надо! В синхронизаторе - 2 триггера на сигнал. А это - ~sinxr_clk_avr & clk_avr даст метастабильность. Надо выделять из clk_avr передний фронт. Т.е. делать импульс длительностью 1 clock Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ysmat 0 13 января, 2016 Опубликовано 13 января, 2016 · Жалоба попробовал скомпилить опять пошли ошибки компиляции причем ну очень странного содержания TRIG[0:7] <= mode[7:0]; Error (10198): Verilog HDL error at avrout.v(42): part-select direction is opposite from prefix index direction вроде что то с разрядностью причем ошибки везде где шина развернута если же прямо TRIG[7:0] <= mode[7:0]; все ок никаких проблем Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iosifk 3 13 января, 2016 Опубликовано 13 января, 2016 · Жалоба TRIG[0:7] <= mode[7:0]; Error (10198): Verilog HDL error at avrout.v(42): part-select direction is opposite from prefix index direction .... прямо TRIG[7:0] <= mode[7:0]; все ок никаких проблем Вот возьмите себе за правило. Чем меньше "разнообразия", тем меньше вероятность ошибки. Это относится и к логическим активным уровням, и к нумерации шин и к написанию текстов файлов и к комментариям. А особенно к названиям сигналов... В чем необходимость перекручивать сигналы в шине TRIG[0:7] <= mode[7:0]; ??? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ysmat 0 13 января, 2016 Опубликовано 13 января, 2016 · Жалоба ну если с mode[7:0]; особых проблем нет я потом в avr переверну то как сделать это TRIG[0:38] <= TRIG[1:39]; такая же проблема я вобще не професионал и вряд ли им стану восновном делаю для себя разные девайсы типа хобби и все но на мой субективный взгяд верилог тяжелый язык для новичка тут надо точно знать что как делаеться в соседней ветке про управляемый гребенчатый фильтр где нужно сделать вычисляемый отвод от цепочки регистров та конструкция через for что я везде ставил оказалось не работает еслиб не помощь я б решения не нашел по поводу разнообразия полностью согласен нужен один стандарт на язык програмирования ну понятно что отличия все равно будут но одни и те-же по смыслу функции очень желательно чтоб везде были одинаковыми например фигурные скобки {} а здесь begin и end зачем так сделали непонятно вобщем решил не связываться с for вместо TRIG[0:38] <= TRIG[1:39]; TX <= TRIG[0]; TRIG[0] <= TRIG[1]; TRIG[1] <= TRIG[2]; TRIG[2] <= TRIG[3]; TRIG[3] <= TRIG[4]; TRIG[4] <= TRIG[5]; TRIG[5] <= TRIG[6]; TRIG[6] <= TRIG[7]; TRIG[7] <= TRIG[8]; TRIG[8] <= TRIG[9]; TRIG[9] <= TRIG[10]; TRIG[10] <= TRIG[11]; TRIG[11] <= TRIG[12]; TRIG[12] <= TRIG[13]; TRIG[13] <= TRIG[14]; TRIG[14] <= TRIG[15]; TRIG[15] <= TRIG[16]; TRIG[16] <= TRIG[17]; TRIG[17] <= TRIG[18]; TRIG[18] <= TRIG[19]; TRIG[19] <= TRIG[20]; TRIG[20] <= TRIG[21]; TRIG[21] <= TRIG[22]; TRIG[22] <= TRIG[23]; TRIG[23] <= TRIG[24]; TRIG[24] <= TRIG[25]; TRIG[25] <= TRIG[26]; TRIG[26] <= TRIG[27]; TRIG[27] <= TRIG[28]; TRIG[28] <= TRIG[29]; TRIG[29] <= TRIG[30]; TRIG[30] <= TRIG[31]; TRIG[31] <= TRIG[32]; TRIG[32] <= TRIG[33]; TRIG[33] <= TRIG[34]; TRIG[34] <= TRIG[35]; TRIG[35] <= TRIG[36]; TRIG[36] <= TRIG[37]; TRIG[37] <= TRIG[38]; TRIG[38] <= TRIG[39]; TRIG[39] <= 0; напрямую написал Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
bugdesigner 0 17 января, 2016 Опубликовано 17 января, 2016 (изменено) · Жалоба TRIG[38:0]<=TRIG[39:1]; проще и понятнее будет Для вашего mode: TRIG[7:0]<={mode[0],mode[1],mode[2],mode[3],mode[4],mode[5],mode[6],mode[7]}; или с использованием generate: genvar i; generate for(i=0; i<8; i=i+1) begin TRIG[i]<= mode[7-i]; end endgenerate Еще есть System Verilog... Изменено 17 января, 2016 пользователем bugdesigner Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iosifk 3 17 января, 2016 Опубликовано 17 января, 2016 · Жалоба ну если с mode[7:0]; особых проблем нет я потом в avr переверну то как сделать это TRIG[0:38] <= TRIG[1:39]; такая же проблема я вобще не професионал и вряд ли им стану восновном делаю для себя разные девайсы типа хобби и все но на мой субективный взгяд верилог тяжелый язык для новичка тут надо точно знать что как делаеться в соседней ветке про управляемый гребенчатый фильтр где нужно сделать вычисляемый отвод от цепочки регистров та конструкция через for что я везде ставил оказалось не работает еслиб не помощь я б решения не нашел по поводу разнообразия полностью согласен нужен один стандарт на язык програмирования ну понятно что отличия все равно будут но одни и те-же по смыслу функции очень желательно чтоб везде были одинаковыми например фигурные скобки {} а здесь begin и end зачем так сделали непонятно вобщем решил не связываться с for вместо TRIG[0:38] <= TRIG[1:39]; напрямую написал Да нет, Верилог не виноват. Вы же написали: reg [39:0] TRIG; Вот он и хочет видеть выборку частей вектора именно в таком порядке, а не наоборот. Написали бы наоборот и он бы горя не знал... И не про "фигурные скобки {} а здесь begin и end " я Вам пытался объяснить, а про то, что Вы сами себе жизнь усложняете разными выкрутасами... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться