x736C 0 26 мая, 2010 Опубликовано 26 мая, 2010 (изменено) · Жалоба соответственно записываются след признаки - 100, 010, 001. Для трех признаков достаточно двух бит, для комбинации всех признаков достаточно трех: {«твердость последнего слога», «твердый/мягкий», «гласный/согласный»} Комбинация из этих трех бит будет однозначно кодировать шесть окончаний: лар, лер, дар, дер, тар, тер. Берем буфер, в который заносим слово, вдвигая его справа, либо записывая так, чтобы младший регистр соответствовал последней букве. Далее, на мой взгляд, достаточно одной FSM (автомат конечных состояний), которая определит одно из шести состояний регистра окончаний. До записи в буфер (или включая саму запись) и после чтения из него несинтезирумым подмножеством описываете запись слов в регистр и чтение их на экран или в файл. Таким образом модули памяти в вашем проекте не обязательны, если того специально не требуют. Можно, конечно, инициализировать словами блок памяти. Из памяти производить чтение последнего слога-буквы. И так далее. Перед выводом результата окончание, разумеется, необходимо раскодировать (трехразрядное двоичное число заменить на соотв. слог). Задача в вашем случае решается ориентировочно за день-два. Три. UPD: Про конкатенацию убрал, глупость сморозил. Изменено 26 мая, 2010 пользователем x736C Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Chainichek 0 27 мая, 2010 Опубликовано 27 мая, 2010 · Жалоба Можно, конечно, инициализировать словами блок памяти. Из памяти производить чтение последнего слога-буквы. Это было б вообще шикарррррно! Большое-пребольшое спасибо, за совет. Надо выяснить про автомат конечных состояний... Для трех признаков достаточно двух бит, для комбинации всех признаков достаточно трех: {«твердость последнего слога», «твердый/мягкий», «гласный/согласный»} согласные еще делятся на "глухой/сонорный/звонкий" если согласный/глухой/твердый слог - тар если согласный/глухой/мягкий слог - тер если согласный/звонкий/твердый слог или согласный/сонорный/твердый слог - дар если согласный/звонкий/мягкий слог или согласный/сонорный/мягкий слог - дер Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Chainichek 0 27 мая, 2010 Опубликовано 27 мая, 2010 · Жалоба Думаю, прокатит автомат вроде этого: module moore (data_in, data_out, reset, clock); output data_out; input [1:0] data_in; input reset, clock; reg data_out; reg [2:0] pres_state, next_state; parameter st0=3'd0, st1=3'd1, st2=3'd2, st3=3'd3, st4=3'd4; //FSM register always @(posedge clock or negedge reset) begin: statereg if(!reset) pres_state = st0; else pres_state = next_state; end // statereg // FSM combinational block always @(pres_state or data_in) begin: fsm case (pres_state) st0: case(data_in) 2'b00: next_state=st0; 2'b01: next_state=st4; 2'b10: next_state=st1; 2'b11: next_state=st2; endcase st1: case(data_in) 2'b00: next_state=st0; 2'b10: next_state=st2; default: next_state=st1; endcase st2: case(data_in) 2'b0x: next_state=st1; 2'b1x: next_state=st3; endcase st3: case(data_in) 2'bx1: next_state=st4; default: next_state=st3; endcase st4: case(data_in) 2'b11: next_state=st4; default: next_state=st0; endcase default: next_state=st0; endcase end // fsm // Moore output definition using pres_state only always @(pres_state) begin: outputs case(pres_state) st0: data_out=1'b1; st1: data_out=1'b0; st2: data_out=1'b1; st3: data_out=1'b0; st4: data_out=1'b1; default: data_out=1'b0; endcase end // outputs endmodule // Moore Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xvr 12 27 мая, 2010 Опубликовано 27 мая, 2010 · Жалоба Синтез не обязателен. Главное чтоб алгоритм был описан в верилоге и работал адекватно.В таком случае напишите это все в обычном процедурном стиле (через if ... else ...). Verilog это позволяет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 27 мая, 2010 Опубликовано 27 мая, 2010 · Жалоба Синтез не обязателен. Главное чтоб алгоритм был описан в верилоге и работал адекватно. Как человек с опытом преподавания хочу сказать что мне вас жаль, гнать в шею надо таких преподавателей HDL. Но и люди с вашим подходом к HDL у меня сдавали бы зачет раза с 8 го %) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Maverick_ 15 27 мая, 2010 Опубликовано 27 мая, 2010 · Жалоба Chainichek попробуйте последовать замечаниям/советам от людей, которые не побоюсь сказать ГУРУ в ПЛИС (и не только) и не одну "собаку на этом съели". Вам была предложена базовая литература - почитайте ее. Попробуйте вначале понять разницу между микропроцессором и ПЛИС. Дополнительно разберитесь для каких целей и применений служит язык Си и xHDL. PS Потратьте время разберитесь и сделайте диплом(если я правильно помню) без ошибок и красиво. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Chainichek 0 27 мая, 2010 Опубликовано 27 мая, 2010 · Жалоба гнать в шею надо таких преподавателей HDL Скажем так, нет у нас преподавателей по HDL. Все изучаем сами и самостоятельно. Тыкаем, копаемся, пробуем. Так что, их удовлетворит любой подход. Chainichek попробуйте последовать замечаниям/советам от людей, которые не побоюсь сказать ГУРУ в ПЛИС (и не только) и не одну "собаку на этом съели". Вам была предложена базовая литература - почитайте ее. Попробуйте вначале понять разницу между микропроцессором и ПЛИС. Дополнительно разберитесь для каких целей и применений служит язык Си и xHDL. PS Потратьте время разберитесь и сделайте диплом(если я правильно помню) без ошибок и красиво. Ок, буду иметь ввиду. В принципе, уже начала. Просто время поджимает. Задача про которую я рассказала - только фрагмент всего проекта. Кроме множественных окончаний, есть еще куча других правил естественного языка. Все надо будет автоматизировать на аппаратном уровне, как бы это не абсурдно звучало. Защита диплома - 5 июля. Думаю, до защиты еще не раз приду за помощью. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
x736C 0 28 мая, 2010 Опубликовано 28 мая, 2010 · Жалоба Думаю, прокатит автомат вроде этого:Вам лучше изменить подход, иначе не поспеете к июлю. :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Chainichek 0 1 июня, 2010 Опубликовано 1 июня, 2010 · Жалоба Вообщем, вот первичная версия реализации моей задачи. Она работает. Проверяла на симуляторе ModelSim-Altera 6.5b (Quartus II 9.1) Starter Edition. Незнаю, можно ли принять это за конечный автомат, обычный алгоритм. Вопрос: можно ли преобразовать этот код так, чтоб он был синтезабельным? Возможно ли это? module rom; parameter DATA_WIDTH=32, ADDR_WIDTH=8, kat1 = 4'd0, kat2 = 4'd1, kat3 = 4'd2, kat4 = 4'd3, und1 = 4'd4, und2 = 4'd5, und3 = 4'd6, uan1 = 4'd7, uan2 = 4'd8, gl = 1'b0, sogl = 1'b1, zhuan = 1'b0, zhin = 1'b1; reg [0:31] rom[0:3]; reg [0:31] soz; reg [0:55] soz1, soz2; reg [0:23] kzhalgau, izhalgau; reg [0:7] sozpar [0:3]; reg [0:7] zvuk, zvuk1; reg [0:2]state; reg [0:3]zz; reg z, d; integer i, j, dat1; initial begin $readmemb("dual_port_rom_init.txt", rom); begin: zapis for (i=0; i<=3; i=i+1) begin soz = rom; kzhalgau = koptik(soz); soz1 = {soz,kzhalgau}; $fdisplay (dat1,"%b", soz1); end end end function [0:23] koptik; input reg [0:31] soz; begin zvuk = soz[24:31]; z = dybys(zvuk); if (z == gl) begin d = glas (zvuk); case (d) zhuan: koptik = 24'b00111011_00110000_01000000; zhin: koptik = 24'b00111011_00110101_01000000; endcase end else begin zz = soglas(zvuk); if (dybys (soz[16:23])==gl) zvuk1 = soz[16:23]; else zvuk1 = soz[8:15]; d = glas (zvuk1); case (zz) kat1, kat2, kat3, kat4, uan1: if (d == zhuan) koptik = 24'b01000010_00110000_01000000; else koptik = 24'b01000010_00110101_01000000; und1, und3, uan2: if (d == zhuan) koptik = 24'b00110100_00110000_01000000; else koptik = 24'b00110100_00110101_01000000; und2: if (d == zhuan) koptik = 24'b00111011_00110000_01000000; else koptik = 24'b00111011_00110101_01000000; endcase end end endfunction function dybys; input reg [0:7] in; case (in) 8'b00110000, 8'b00111110, 8'b10110001, 8'b01001011, 8'b11011001, 8'b11101001, 8'b10101111, 8'b01010110, 8'b00110101: dybys = gl; 8'b00111111, 8'b00111010, 8'b10011011, 8'b01000001, 8'b01000010, 8'b01001000, 8'b00111100, 8'b00111101, 8'b10100011, 8'b01000000, 8'b01000011, 8'b00111001, 8'b00111011, 8'b00110001, 8'b00110011, 8'b10010011, 8'b00110100, 8'b00110110, 8'b00110111: dybys = sogl; endcase endfunction function glas; input reg [0:7] in; case (in) 8'b00110000, 8'b00111110, 8'b10110001, 8'b01001011: glas = zhuan; 8'b11011001, 8'b11101001, 8'b10101111, 8'b01010110, 8'b00110101: glas = zhin; endcase endfunction function [0:3] soglas; input reg [0:7] in; case (in) 8'b00111111: soglas = kat1; 8'b00111010: soglas = kat2; 8'b10011011: soglas = kat3; 8'b01000001, 8'b01000010, 8'b01001000: soglas = kat4; 8'b00111100, 8'b00111101, 8'b10100011: soglas = und1; 8'b01000000, 8'b01000011, 8'b00111001: soglas = und2; 8'b00111011: soglas = und3; 8'b00110001, 8'b00110011, 8'b10010011, 8'b00110100: soglas = uan1; 8'b00110110, 8'b00110111: soglas = uan2; endcase endfunction endmodule Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Des333 0 1 июня, 2010 Опубликовано 1 июня, 2010 · Жалоба Используйте тег code Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Chainichek 0 1 июня, 2010 Опубликовано 1 июня, 2010 · Жалоба module rom; parameter DATA_WIDTH=32, ADDR_WIDTH=8, kat1 = 4'd0, kat2 = 4'd1, kat3 = 4'd2, kat4 = 4'd3, und1 = 4'd4, und2 = 4'd5, und3 = 4'd6, uan1 = 4'd7, uan2 = 4'd8, gl = 1'b0, sogl = 1'b1, zhuan = 1'b0, zhin = 1'b1; reg [0:31] rom[0:3]; reg [0:31] soz; reg [0:55] soz1, soz2; reg [0:23] kzhalgau, izhalgau; reg [0:7] sozpar [0:3]; reg [0:7] zvuk, zvuk1; reg [0:2]state; reg [0:3]zz; reg z, d; integer i, j, dat1; initial begin $readmemb("dual_port_rom_init.txt", rom); begin: zapis for (i=0; i<=3; i=i+1) begin soz = rom[i]; kzhalgau = koptik(soz); soz1 = {soz,kzhalgau}; $fdisplay (dat1,"%b", soz1); end end end function [0:23] koptik; input reg [0:31] soz; begin zvuk = soz[24:31]; z = dybys(zvuk); if (z == gl) begin d = glas (zvuk); case (d) zhuan: koptik = 24'b00111011_00110000_01000000; zhin: koptik = 24'b00111011_00110101_01000000; endcase end else begin zz = soglas(zvuk); if (dybys (soz[16:23])==gl) zvuk1 = soz[16:23]; else zvuk1 = soz[8:15]; d = glas (zvuk1); case (zz) kat1, kat2, kat3, kat4, uan1: if (d == zhuan) koptik = 24'b01000010_00110000_01000000; else koptik = 24'b01000010_00110101_01000000; und1, und3, uan2: if (d == zhuan) koptik = 24'b00110100_00110000_01000000; else koptik = 24'b00110100_00110101_01000000; und2: if (d == zhuan) koptik = 24'b00111011_00110000_01000000; else koptik = 24'b00111011_00110101_01000000; endcase end end endfunction function dybys; input reg [0:7] in; case (in) 8'b00110000, 8'b00111110, 8'b10110001, 8'b01001011, 8'b11011001, 8'b11101001, 8'b10101111, 8'b01010110, 8'b00110101: dybys = gl; 8'b00111111, 8'b00111010, 8'b10011011, 8'b01000001, 8'b01000010, 8'b01001000, 8'b00111100, 8'b00111101, 8'b10100011, 8'b01000000, 8'b01000011, 8'b00111001, 8'b00111011, 8'b00110001, 8'b00110011, 8'b10010011, 8'b00110100, 8'b00110110, 8'b00110111: dybys = sogl; endcase endfunction function glas; input reg [0:7] in; case (in) 8'b00110000, 8'b00111110, 8'b10110001, 8'b01001011: glas = zhuan; 8'b11011001, 8'b11101001, 8'b10101111, 8'b01010110, 8'b00110101: glas = zhin; endcase endfunction function [0:3] soglas; input reg [0:7] in; case (in) 8'b00111111: soglas = kat1; 8'b00111010: soglas = kat2; 8'b10011011: soglas = kat3; 8'b01000001, 8'b01000010, 8'b01001000: soglas = kat4; 8'b00111100, 8'b00111101, 8'b10100011: soglas = und1; 8'b01000000, 8'b01000011, 8'b00111001: soglas = und2; 8'b00111011: soglas = und3; 8'b00110001, 8'b00110011, 8'b10010011, 8'b00110100: soglas = uan1; 8'b00110110, 8'b00110111: soglas = uan2; endcase endfunction endmodule Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dvladim 0 2 июня, 2010 Опубликовано 2 июня, 2010 · Жалоба Вам советовали использовать тег code для того чтобы отступы остались, а так читаемость все равно нулевая. И проще редактировать сообщения, а не дублировать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Des333 0 2 июня, 2010 Опубликовано 2 июня, 2010 · Жалоба Совет: используйте параметры заместо констант. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Chainichek 0 5 июня, 2010 Опубликовано 5 июня, 2010 · Жалоба Вам советовали использовать тег code для того чтобы отступы остались, а так читаемость все равно нулевая. И проще редактировать сообщения, а не дублировать. Я хотела отредактировать, но мне выдали сообщение, что у меня нет прав редактировать мое же сообщение. Совет: используйте параметры заместо констант. Да, я там поменяла уже. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Chainichek 0 15 июня, 2010 Опубликовано 15 июня, 2010 · Жалоба Люди, где найти драйвер для USB Бластера Альтера? Хотела запрограммировать Циклон 3, что то не распознает. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться