Leo

Не Работает Сдвиговый Регистр В Верилог

145 сообщений в этой теме

Leo    3

Достойно.Но я не понел пока что ты сделал. А значения так и не распределились как надо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Vascom    647

я добавил сигнал rstn.

Как же не распределились? Всё как надо, по порядку идёт.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Leo    3

Да но регистры заполняются не по сигналу С а на 230 ns разом первый становится третьим а четвертый заполняется на 470 так что результат не совсем правельный.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Vascom    647

Я тебя не понимаю. Какие С, откуда 230, 470?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Leo    3

Запускаю в программе GTKWave и результат выводится перевернутый на 230ns для трех регистров 1-3 а для четвертого потом а код был написан вывод по сигналу "c" 12 значений 3 значения четыре раза. У тебя что подругому?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Vascom    647

Добавь ресет во все регистры.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Leo    3

Добавил в тест бэнч перед данными не помогло картина меняется не существенно или подругому надо сделать а чем грозят задержки #? в коде тест бэнч.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Leo    3

Хочу развести плату для Альтеры но почитав монуал чесно говоря не очень понял у микросхемы должно быть питание. Входов там несколько питание ядра вроде не одно и также для генератора. Питание портов ввода-вывода выводы под JTAG или есть ещё что то где это лучше посмотреть вроде в квартус есть картинка портов а то после монуала каша пока.Если есть опыт подскажи.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Vascom    647

Читай даташит. Хотя я сомневаюсь, что осилишь разводку для Альтеры.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Leo    3

Звучит как приговор.Может основные моменты можно осветить и остольное стало бы понятнее.Или ты этим не заморачивался.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Vascom    647

Этим ни кто не заморачивался. Купи макетную плату с распаяной альтерой.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Leo    3

Это ты видно просто не вкурсах.Жаль.Хотя может ты и прав.Но если чего узнаешь напиши.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Vascom    647

Ну если ты сможешь несколько сотен шариков развести и многослойную плату сделать. То конечно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Leo    3

Ты про BGA я про ту которая с ножками.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Vascom    647

Ну и указал бы её модель, корпус. Или ты думаешь я твои мысли читаю?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Leo    3

Модель ALTERA ep3c25e144c8n tqfp144 или она тоже проблемная.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Leo    3

Нашёл распиновку ep3c25e144 но пока не очень разобрался.

EP3C25.pdf

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Leo    3

Появились в коде не понятные задержки что то не понятно почему.

`timescale 1ns/1ns
module counter_uut(
   shift,
   clk,
   sr_in,
   rstn,
   sr_out1,
   sr_out2,
   sr_out3
);
input rstn;
input wire [7:0]sr_in;
input shift,clk;
output  [7:0]sr_out1,sr_out2,sr_out3;
reg[23:0]a;
reg[7:0]b1,b2,b3;
reg[7:0]s1,s2,s3,v1,v2,v3;
reg [1:0]counte=2'b0;
wire c;
always @(posedge clk or negedge rstn)
begin
if(!rstn) a <= 24'b0;
else a <= { a[15:0],sr_in };
end
always @(posedge clk)
begin
if(counte==2'd2)    counte <= 2'b0;
   else			    counte <= counte + 1'd1;
end
assign c= counte==2'd2;
always @(posedge clk)
if(c==1)
begin
  s1<=a[23:16];
  s2<=a[15:8];
  s3<=a[7:0];
if(s1>b1)
 v1<=s1-b1; 
 else
 v1<=b1-s1;
if(s2>b2)
 v2<=s2-b2;
 else
 v2<=b2-s2;
if(s3>b3)
 v3<=s3-b3;
 else
 v3<=b3-s3;

  end
endmodule

Тест бэнч

`timescale 1ns/1ns
module test();
reg rstn;
reg clk;
reg [7:0] sr_in;
initial
begin
   clk = 0;
   sr_in = 0;
   rstn = 0;
end

always
 #10 clk= ~clk;

wire[7:0]sr_out1,sr_out2,sr_out3;

counter_uut counter(
   .clk(clk),
   .rstn(rstn),
   .sr_in(sr_in),
   .sr_out1(sr_out1)
);


initial
begin
$dumpfile("out.vcd");
$dumpvars(-1, test);
$monitor($stime,, clk,,, sr_in,, sr_out1);
@(negedge clk);
rstn = 1;
@(posedge clk);
sr_in = 120;
@(posedge clk);
sr_in = 230;
@(posedge clk);
sr_in = 255;

@(posedge clk);
sr_in = 130;
@(posedge clk);
sr_in = 225;
@(posedge clk);
sr_in = 250;

@(posedge clk);
sr_in = 120;
@(posedge clk);
sr_in = 220;
@(posedge clk);
sr_in = 245;

@(posedge clk);
sr_in = 100;
@(posedge clk);
sr_in = 230;
@(posedge clk);
sr_in = 255;
@(posedge clk);
sr_in = 90;
@(posedge clk);
sr_in = 240;
@(posedge clk);
sr_in = 250;

@(posedge clk);
sr_in = 110;
@(posedge clk);
sr_in = 250;
@(posedge clk);
sr_in = 240;
#430$finish();
end
endmodule

Значения v1,v2,v3 выводятся не одновременно через несколько тактов сигнала С начинается разнобой подскажи в чем проблема.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Leo    3

Переделал вот так вроде заработало не знаю так правельно

always @(c)
begin
if(c==1)
begin
  s1<=a[23:16];
  s2<=a[15:8];
  s3<=a[7:0];
end
begin
if(s1<b1)
v1<=b1-s1; 
 else
v1<=s1-b1;
if(s2<b2)
 v2<=b2-s2;
 else
 v2<=s2-b2;
if(s3<b3)
 v3<=b3-s3;
 else v3<=s3-b3;
 b1<=s1;
 b2<=s2; 
 b3<=s3;
  end
end

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Похожие публикации

    • Автор: Scinar
      Привет всем. Хочу собрать калькулятор на atmega 328p. Но не как не могу запустить LCD TIC55, основанный на сдвиговом регистре с чипом ML1001. Никогда не связывался с подобным дисплеем. Понравился очень экономичным потреблением тока и экономным количеством выводов управления - всего 3. Проблема в тактирование, как написать программу для вывода хотя б одного символа, документации мало нашел, так же есть библиотека для atmel studio 5, сам пользуюсь 7. Библиотку переделал под 7 но дисплей так ничего и не вывел. Подскажите как правильно написать программу, язык значения не имеет хоть assembler или С. Мне надо что б дисплей вывел хоть один символ корректно, дальше разберусь


      TIC55 Display Module.pdf
    • Автор: Корлет
      Надо составить схему регистра на триггерах, выполняющую сложение по модулю два. Складывается два двоичных числа: то, которое хранится на триггере, и то, которое подаётся на вход. С конъюнкцией получилось легко, а вот xor никак не могу придумать. Если кто знает, дайте, пожалуйста, схему или хотя бы расскажите на словах, что где.

    • Автор: admin
      Показано управление сдвиговым регистром 74HC164 в симуляторе Proteus. На основе этой схемы собраны бегущие огоньки из 16 светодиодов. 
      Бегущие огни.rar
    • Автор: Дмитрий Т87
      Здравствуйте. Прошу помощи в теме статитическая индикация 6 разрядного 7ми сегментного индикатора по 2м проводам Data и Clock.
      Есть такой код для 3х разрядного индикатора в CVavr Си
      Хочу закидывать данные в каждый разряд отдельно, и выводить эти функции в прерываниях avr микроконтроллера.

      // cd4094 control example by kalobyte.com 2009 #include <avr/io.h> #define F_CPU 1000000UL #include <util/delay.h> #define REG_PORT PORTB #define REG_DDR DDRB #define REG_PIN_DATA 3 #define REG_PIN_CLK 4 //--- #define REG_DATA_ON REG_PORT|=1<<REG_PIN_DATA; #define REG_DATA_OFF REG_PORT&=~(1<<REG_PIN_DATA); #define REG_CLK {REG_PORT|=1<<REG_PIN_CLK;REG_PORT&=~(1<<REG_PIN_CLK);} unsigned char digs[10]={0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F}; // katode // unsigned char digs[10]={0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90}; //anode void cd4094_init(void){ char i=0; while(i!=24){ REG_CLK i++; } } void cd4094(int dig){ char i,tmp,j; //dig = 123; int div[4]; div[1] = digs[dig%10]; dig = dig/10; div[2] = digs[dig%10]; div[3] = digs[dig/10]; for(j=3;j>0;j--){ tmp = div[j]; for(i=8;i>0;i--){ if(tmp & 0x80){ REG_DATA_ON } else {REG_DATA_OFF} tmp <<=1; REG_CLK } } } int main(void){ int i=1; REG_DDR = (1<<REG_PIN_DATA)|(1<<REG_PIN_CLK); REG_PORT = (0<<REG_PIN_DATA)|(0<<REG_PIN_CLK); cd4094_init(); //cd4094(2); while(i<999){ _delay_ms(1000); cd4094(i); i++; } return 0; }
      Вот такая схема

    • Автор: peanutwolf
      Добрый день!
      Прошу помощи.
      Имеется клемма, на вход которой поочередно необходимо подавать 12В. Подскажите, как это сделать с использованием сдвигового регистра.
      Пробовал делать через транзисторный ключ, но у меня его ни как не получается запереть при подаче 5 вольт на базу.
      Здесь я подаю 0 на базу, на коллекторе 12В:

      Здесь я подаю 1 на базу, напряжение на коллекторе так же 12В:

      Буду так же очень благодарен, если кто нибудь подскажет вариант решения без использования транзистора.
  • Сообщения

    • Ленц здесь не причем ... Это по следам какого-то очередного открытия из сарая, которое "не в состоянии объяснить официальная физика"? 100 МГц при такой мощности - параметры эфирного ТВ передатчика в городе. Никто на досуге этим заниматься не будет ... 
    • Это может защита срабатывать, или питания не хватает ИРке, проверьте цепь питания... Стабилитрон, диоды, элоктролит по питанию ИРки...
    • @grek685 , вопрос о "правильном звуке"  не имеет однозначного ответа. Это всё очень относительно. И я, конечно, дико извиняюсь, но судя по Вашим вопросам, Вам ещё очень рано собирать такой усилитель. Это очень опасное и сложное мероприятие - и если Вы думаете, что на "опасность" можно наплевать, то вспомните, как вычисляется энергия, накопленная конденсатором... Ну, а сложность будет скрываться в конструктиве - при высоком напряжении питания качеству изготовления выходных трансформаторов должно быть уделено особое внимание. Блок питания получится совсем "недецких" размеров и тоже должен быть сделан качественно и с учётом высоковольтности(там же кроме накальных напряжений ещё  и два "высоких" с задержкой их включения надо делать). Ну, и "по деньгам" это будет совсем недёшево...
    • Благодарю. Буду изучать схемы с ГУ-72, теперь. Я верно понимаю, что триодное включение лампы даёт самый "правильный" звук? Да уж 1000в это круто! Ну вот хочется, но страшно 1000в !)  Главное уже понимаю, что работа предстоит опасная.  Благодарю Вас за советы. Пошёл искать, изучать схемы на гм.
    • Ну и что же по-твоему может дать информация о производителе этого динамика?   Порой даже брендовые производители подобных динамиков не выкладывают в открытый доступ полную тех. инфу о своих изделиях, чего уж тогда ожидать от азиатских "штамповщиков".  У тебя имеется двухкатушечный динамик, и в принципе не важно кто его производитель - азиаты сейчас научились делать не хуже брендовых производителей, зачастую являясь нет только поставщиками комплектующих для этих "брендов", но и непосредственными производителями изделий этих "брэндов".  Делай серию замеров TS-параметров с одной катушкой, с другой, с их параллельным включением, с последовательным - это даст больше информации как о характеристиках динамика, так и о его тех. состоянии и качестве изготовления, что позволит сделать собственные выводы о производителе, кем бы он не был и какой бы красивый пинжак на себя не натягивал. Но главное, реальные параметры позволят не только точно рассчитать  "короб" для этого динамика, но и сделать наиболее правильную инсталляцию всей акустической системы авто, в составе которой предполагается использовать этот сабвуфер. 
    •   2х25 это переменка у меня, нашел еще в закромах SS510 100V 5A
    • Диодов хватит, если питание не поднимать выше  +/- 25 В.