Перейти к содержанию

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


Leo

Рекомендуемые сообщения

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

  • Ответов 144
  • Создана
  • Последний ответ

Топ авторов темы

Топ авторов темы

Изображения в теме

Верно. В этом примере надо либо i начинать с 1, либо переделать так:

sr[(i+1)*8-1:i*8];

Но так извращаться можно долго. Пока не поставлена конкретная задача - ни чему не научишься.

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

  • 2 недели спустя...

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Я попробовал посмотреть как работает цикл For и что то получилось но не более чем было написано в примере из Альтеры в самом начале. Но передать параметр sr[1] дальше типа //a <= v+ sr[1] и подругому не получается. Пишет не явное присвоение почему не понятно.Хотя на assign sr_out1 = sr[1]; заначения выводит значит массив значениями заполняется или я ошибаюсь.Значения в заполнении регистра sr <= { sr[23:0],sr_in }; так же идут но там видно что регистр заполняется а здесь не ясно заполняется ли массив.

module counter (

shift,

clk,

sr_in,

sr_out,

sr_out1,

sr_out2,

sr_out3,

sr_out4

);

input shift,clk;

input wire [7:0]sr_in;

output [7:0]sr_out,sr_out1,sr_out2,sr_out3,sr_out4;

reg [3:0]counte=4'b0;

reg [7:0] sr [3:0];

integer n;

reg [7:0]v =8'h57;

reg [7:0]a;

wire c;

always @ (posedge clk

if (shift ==1 )

begin

if(counte==4'd4)

counte <= 4'b0;

else

counte <= counte + 1'd1;

for (n = 0; n<4; n = n+1)

begin

sr[0] <= sr_in;

sr[n] <=sr[n-1];

$display("%d",n,sr[n]);

end

end

assign c =counte==4'd4;

assign sr_out = sr[0];

assign sr_out1 = sr[1];

assign sr_out2 = sr[2];

assign sr_out3 = sr[3];

//assign a =v+ sr[3];

//always @ (posedge clk)

//if(c==1)

// begin

//a <= v+ sr[2]

//$display("%d",n,a);

//end

initial

$monitor($stime,, shift,, clk,,,sr_out,sr_out1,a, sr_in );

endmodule

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

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Код закоментирован просто он не может быть выполнен отладчик ругается и что можно предпринять что бы продолжить выполнение а то параметр sr[1] дальше не передается.

Изменено пользователем Leo
Ссылка на комментарий
Поделиться на другие сайты

Например вот так:

Модуль http://paste.fedorap...86657/52311751/

Тестбенч http://paste.fedorap.../86659/13952312

И получаем отличную диаграмму, всё работает как и задумано:

post-164632-0-27601400-1395231352_thumb.png

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

Не знаю почему но код который я писал и правил я не удаляю а коментирую так этот вариант кода выдаёт ошибку туже даже с твоим тестбэнчем а оформленный заново в новый файл без коментариев нормально заработал и с моим тестбэнчем.

Может где ошибки сохраняются.

Мы этот пример в самом начале расматривали и всё было не понятно а щас ты всё великолепно оформил ты вспомнил забытое.

Изменено пользователем Leo
Ссылка на комментарий
Поделиться на другие сайты

Очень хотел узнать если я получил набор членов y[n] от одного до двенадцати как их можно объеденить или сразу надо разбить заново в группу по три члена. Надеюсь не очень мудрено?

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

На выходе в модуле coud у меня есть значения s d этих значений 4x2 но может и больше будет. Значения s[n] на примере они однобитные предположим их 12 рассортировать типа массив по 3 бита 4 раза.

module counter (

shift,

clk,

sr_in,

sr_out,

sr_out1,

sr_out2,

sr_out3,

sr_out4

);

input shift,clk;

input wire [7:0]sr_in;

output [7:0]sr_out,sr_out1,sr_out2,sr_out3,sr_out4;

reg [3:0]counte=4'b0;

reg [7:0] sr [3:0];

integer n;

wire c;

always @(posedge clk)

if (shift ==1)

begin

if(counte==4'd4) counte <= 4'b0;

else counte <= counte + 1'd1;

for (n = 0; n<4; n = n+1)

begin

sr[0] <= sr_in;

sr[n] <=sr[n-1];

$display("%d",n,sr[n]);

end

end

assign c= counte==4'd4;

assign sr_out = sr[0];

assign sr_out1 = sr[1];

assign sr_out2 = sr[2];

assign sr_out3 = sr[3];

wire out[3:0];

genvar y;

generate

for(y = 0; y < 4; y = y + 1 )

begin : dff_g

coud qw0(

.rty©,

.clk(clk),

.asd(sr[y]),

.s(out[y]),

.d(out[y])

);

end

endgenerate

initial

$monitor($stime,, shift,, clk,,,sr_out,sr_out1, sr_in );

endmodule

module coud (

rty,

clk,

asd,

s,

d

);

input rty,clk;

input wire [7:0]asd;

output s,d;

reg s,d;

reg [7:0] v= 8'h45;

reg [7:0] a;

always @ (posedge clk)

if(rty==1)

begin

if(v>asd)

a <= v-asd;

else

a <=asd-v;

s <=(a>150);

d <=(a<50);

v<= asd;

end

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

Ну как хочешь так и объединяй свои биты.

Вообще, использовать массивы при небольших объёмах (как у тебя [7:0] sr [3:0]) неудобно и неэффективно.

Вот если бы было как минимум [31:0] sr [255:0], то ещё можно подумать. А так возьми просто линейный регистр sr [256*4-1:0] и работай с ним и его частями - будет проще и понятнее.

Изменено пользователем Vascom
Ссылка на комментарий
Поделиться на другие сайты

Так вот я и не могу понять s[n] по одному биту это же не регистр [12:0]s мне однобитные значения надо переслать в регистр а потом его нарезать как мне удобно.

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

Это есть обращение к регистру [256*4-1:0] 8 бит четыре раза разделенные по 2 бита правельно.Значит с s [256*4-2:0] я однобитные s объединяю и разделяю на 3 битные но как кним обратится чего то не пойму.

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

Ты на каком-то странном языке объясняешься :)

Тут же всё просто. Регистр [1023:0], обращаешься к его битам по их номеру. Что непонятного?

Хочешь к отдельным битам, хочешь к диапазонам.

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

как сделать вывод из сдвигового регистра?

input clock;
input   ena;
input   IN;
output  [147:0] OUT;

integer n;
reg   TRIG [0:147] ; 

always @(posedge clock)
begin

if (ena) begin
   TRIG[0] <= IN;
   for (n=0; n!=147; n=n+1) begin //
   TRIG[(n+1)] <= TRIG[n];   
   end


 end


end
endmodule

то есть TRIG это 148 одиночных D тригеров соединеных последовательно

а OUT это 148 паралельная битная шина вопрос как их соединить

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

не совсем понимаю суть этого

ведь структура обявления переменной такая тип reg или wire [размер шины] имя [количество елементов]

если сделать reg [147:0]TRIG;

то у нас получиться один 148 битный регистр

как же тогда в нем будет происходить последовательный сдвиг

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

Я попробовал вариат но что то не работает g j параметр не передаётся. Что не так ?

`timescale 1ns/1ns
module counter (
shift,
clk,
sr_in,
sr_out,
sr_out1,
sr_out2,
sr_out3,
sr_out4
);
input shift,clk;
input wire [7:0]sr_in;
output [7:0]sr_out,sr_out1,sr_out2,sr_out3,sr_out4;
reg [3:0]counte=4'b0;
reg [7:0] sr [3:0];
integer n;
wire c;
always @(posedge clk)
if (shift ==1)
begin
if(counte==4'd4) counte <= 4'b0;
else			 counte <= counte + 1'd1;

for (n = 0; n<4; n = n+1)
begin
 sr[0] <= sr_in;
 sr[n] <=sr[n-1];
 $display("%d",n,sr[n]);
end
end
assign c= counte==4'd4;
assign sr_out = sr[0];
assign sr_out1 = sr[1];
assign sr_out2 = sr[2];
assign sr_out3 = sr[3];

coud qw0(
	 .rty(c),
	 .clk(clk),
	 .asd(sr[2]),
	 .s(s),
	 .d(d)
);
coud qw1(
	 .rty(c),
	 .clk(clk),
	 .asd(sr[1]),
	 .s(s),
	 .d(d)
);
reg [7:0] a;
reg [7:0] g;
reg [7:0] j;
always @(a[7:0],a[15:8])
begin
g<=a[7:0];								   //Вот
j<=a[15:8];								  // Вот здесь
end
initial
$monitor($stime,, shift,, clk,,,sr_out,sr_out1, sr_in );
endmodule
module coud (
rty,
clk,
asd,
s,
d
);
input rty,clk;
input wire [7:0]asd;
output reg s,d;
reg [7:0] v= 8'h45;
reg [7:0] a;
always @ (posedge clk)
if(rty==1)
begin
if(v>asd)
a <= v-asd;

else
a <=asd-v;
s <=(a>150);
d <=(a<50);
v<= asd;
$display("%h",a);
end
endmodule

Изменено пользователем Leo
Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу

  • Сообщения

    • Ну вот, пока готовил эскиз, на все вопросы ответили :-) Действительно, в 3D моделях DipTrace нет (или не нашёл) модели корпуса ТО220 с распайкой с нижней стороны и креплением к радиатору - по этому и получился такой 3D-портрет платы. Задуманная конструкция выглядит примерно так:  По факту, для наладки, сейчас подключаю транзисторы, закрепленные на радиаторе, проводами.
    • Чтобы потом не допиливать паровоз до истребителя. Заводские варианты схемотехники куда более предсказуемы. Из "вольностей" в первую очередь как-то решать проблему коммутации, подходящий переключатель для режимов искать история долгая и грустная. Что-то там с реле. На диапазоны 6п4н вроде же ?  пг2 хрен найдёшь, п2г тугое неудобство(  Рассыпушный ацп делать, боже упаси. Ну разве что был грешен, побаловался когда-то пнч-ацп. С 1108пп1 и 155 серией
    • Но зачем повторять 1в1? Там дана просто топология   Но не совсем же с нуля. Маловероятно, что вы найдете расширение диапазона 7135 до 200мВ по тому же методу, что это реализовано в В7-38, тем не менее, это вполне реализуемо. А вот до 20мВ я спустить диапазон не смог Что-то предусилитель интегратора отказывается вести себя хорошо   Для сравнения, та же точка (вход интегратора) при 200мв пределе, усиление х10   Ну и 2В Госпаде боже лтц2400, на этой штуке можно и 6 разрядник собрать, лютый АЦП, какие 4.5 разряда Цена на него сейчас конечно негуманная кстати.
    • Что то не нашёл примеров такой реализации замены. С нуля целесообразность подобного действа под вопросом. Тут мои полномочия всё) Как бы почему смотрю на hm8011-3, возможность реализации +/- норм настольного мультиметра без всякой там жести в виде кодинга и микро-мелких современных элементов. Для калибровки валяется где-то в1-12 и прецизионных резисторов если моих не хватит, есть где заказать.  На данный момент разве что качественного файла нет, пытался там всякими улучшайками чего сделать, увы. Пойду через впн лазить по уголочкам всяким, вдруг всплывёт чего. ------------- 8012, 80c32 + 27c512. Чертежи плат есть, осталось hex раздобыть 
    • Вот на этом фото? Я думал  тут радиатор будет под ними, и они к нему "пузом" будут прикручиваться, а дырочки - для отвёртки. У @asng60 транзисторы в наружную сторону "мордой" смотрят. "Пузом" на плату ложатся. Плата так разведена. Вот и непонятно, как их "пузом" к радиатору прикручивать.
    • Что касаемо модели Парафина, я бы порекомендовал товарищу Джексону проверить ток покоя выходного каскада, это первым делом, и вторым делом- проверить модель ОУ. Ибо в ОМ нет никаких оу а в парафине- есть. 
  • Похожий контент

×
×
  • Создать...