uragan90 0 15 апреля, 2012 Опубликовано 15 апреля, 2012 · Жалоба Здравствуйте все!!! Помогите разобраться в вопросе о цифровам компараторе. Пишу компаратор вида: module comparate #(parameter NBIT =8, parameter NBIT_G = 4) ( input clk, input [NBIT-1:0] A, B, input [NBIT_G-1:0] G, OUT ); Так вобщим обычный компаратор, но тут есть параметер "G" который задаёт область чуствительности сровнения. Допустим шина А и шина В сравниваются между собой, но к шине В применяется область чуствительности G (разрядность которой кстати меньше сравниваемых шин) и если А попадает в эту область чуствительности то на выходе высокий уровень. Я решил что нужно значение G разделить на 2 и полученый результат прибавить к В, сохранив сие в регистре. Затем от В отнять этот результат и сохранить в другом регистре. Но тут разная разрядность шин и потом если В = 254, а G = 14 при сложении получится не то что надо. Помогите составить алгоритм или может пример подобный есть или ресурсы интересные???... За ранее спасибо!!!!! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
uragan90 0 15 апреля, 2012 Опубликовано 15 апреля, 2012 · Жалоба Вобщем нужно чтото типа программируемого гистеризиса для цифрового компаратора... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
uragan90 0 15 апреля, 2012 Опубликовано 15 апреля, 2012 (изменено) · Жалоба По ходу мыслей нет :( Вот я тут написал модуль, не особо наверное! Глянте может кто подскажет, модуль компилируется, но нутром чувстваю - чтото упустил module trig_ADC ( input clk, input clk_adc, input [7:0]adc_data, input [7:0]cpu_data, input [3:0]gisterezis, output Q //........... ); reg [7:0]min=0; reg [7:0]max=0; always @(posedge clk) //or negedge begin if(clk_adc) begin if(cpu_data==8'b1) begin max <= cpu_data + (gisterezis/2); end else begin max <= 1; end end end // always @(posedge clk) //or negedge begin if(clk_adc) begin if(cpu_data==8'b0) begin min <= cpu_data - (gisterezis/2); end else begin min <= 0; end end end assign Q = ((adc_data>min) & (adc_data<max)) ? 1'b1 : 1'b0; // Процедура сравнения endmodule Изменено 15 апреля, 2012 пользователем uragan90 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
barabek 0 15 апреля, 2012 Опубликовано 15 апреля, 2012 · Жалоба По ходу мыслей нет :( вариант: module trig_ADC ( input clk, input clk_adc, input [7:0]adc_data, input [7:0]cpu_data, input [3:0]gisterezis, output Q ); reg [7+1:0]cpu_data_up_temp; reg [7+1:0]adc_data_bott_temp; reg below_up_bound,above_bott_bound; always@(*)cpu_data_up_temp={1'b0,cpu_data}+gisterezis[3:1]; always@(*)adc_data_bott_temp={1'b0,adc_data}+gisterezis[3:1]; // always @(posedge clk)begin if(clk_adc)begin below_up_bound<= cpu_data_up_temp>{1'b0,adc_data};//если включать границы то сравнение '>',иначе '>=' above_bott_bound<=adc_data_bott_temp>={1'b0,cpu_data};//если включать границы то сравнение '>=',иначе '>' end end assign Q = below_up_bound & above_bott_bound; // Процедура сравнения endmodule Я, правда, не проверял. Гляньте. PS. C русским у Вас гораздо хуже, чем у меня :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
uragan90 0 16 апреля, 2012 Опубликовано 16 апреля, 2012 (изменено) · Жалоба barabek Огромное спасибо!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! PS. C русским у Вас гораздо хуже, чем у меня :) Да, это правда... Пару вопросов по вашему варианту кода: {1'b0, cpu_data} // Что делает подобная строчка gisterezis[3:1] // Зачем "1" когда пин был объявлен так input [3:0]gisterezis Изменено 16 апреля, 2012 пользователем uragan90 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
barabek 0 16 апреля, 2012 Опубликовано 16 апреля, 2012 · Жалоба Пару вопросов по вашему варианту кода: 1) {1'b0, cpu_data} // Что делает подобная строчка 2) gisterezis[3:1] // Зачем "1" когда пин был объявлен так input [3:0]gisterezis 1. Конкатенация. Явно привел ширину слова, добавив 0 в качестве 9-го бита, к ширине слова слева. 2. Упростил работу синтезатору, так как gisterezis[3:1]== (gisterezis/2 ). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
uragan90 0 16 апреля, 2012 Опубликовано 16 апреля, 2012 · Жалоба Благодарю за пример и разъяснение!!! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться