krend

Проблемы С Ramb18 Xilinx

11 posts in this topic

krend    0

Добрый день. у меня есть недопонимание в работе ramb18. Не могу понять в чем проблема. Для того чтобы понять суть работы блока ОЗУ работаю только с одним портом (второй просто не подключаю).

Некоторые моменты для меня остаются загадкой -

1 Почему при записи данных в ОЗУ (WE_A = 2'b11) результат записи оказывается сразу на выходе?

2 При отключении записи в ОЗУ (WE_A = 2'b00) (на временной диаграмме заметно, что на выход перестали проходить данные с входа) пытаюсь вынуть из ячеек памяти введенные данные, подавая на вход (ADDRA) адреса ячеек памяти, куда я до этого сохранил данные. но на выходе ничего... Я так понимаю, что мне нужно как-то переключить ramb в режим чтения из памяти, подав определенный сигнал куда-то, но понять не могу как мне это сделать...

Прилагаю временную диаграмму, файл тестбенча и даташит на ramb18, непосредственно схему с ее атрибутами.


Файл тест бенча

/ Verilog test fixture created from schematic C:\23\project_28_09_priemnik\schem.sch - Wed Dec 31 23:30:50 2008
`timescale 1ns / 1ps
module schem_schem_sch_tb();
// Inputs
reg [13:0] addres_a;
reg enable_a;
reg clk;
reg [15:0] data_in;
reg[1:0] we_a;
reg [1:0] dip_a;
reg reg_a;
reg SSRA;
// Output
wire [1:0] dop_a;
wire [15:0] out_A;

// Instantiate the UUT
schem UUT (
.SSRA(SSRA),
.reg_a(reg_a),
.dop_a(dop_a),
.dip_a(dip_a),
.addres_a(addres_a),
.out_A(out_A),
.enable_a(enable_a),
.clk(clk),
.data_in(data_in),
.we_a(we_a)
);
// Initialize Inputs

 initial begin
addres_a = 14'b00000000000000; // 14-ти разрядная шина адреса порта А
enable_a =1;	 // вход сигнала разрешения первого порта
clk = 0;		 // тактовый сигнал
data_in=16'h000f;	 // входные 16-ти разрядные шины данных
we_a=2'b11;		 // 2 разрядный вход, объединяющий сигналы разрешения записи соответствующего байта данных в первый порт
dip_a=2'b00;	 // 2 разрядная входная шина, применяемая для осуществления контроля четности информационных данных первого порта
reg_a=1;		 // вход сигнала разрешения синхронизации выходного регистра первого порта
SSRA=0;		 // вход сигнала синхронного сброса/установки первого порта
end

always begin
#5 clk=!clk;
end

/*
начальные установки такие ставим RAMB18 на запись (we_a=2'b11 - запись идет в два байта, хотя мои данные можно записывать и в один байт)
в первую ячейку памяти (addres_a = 14'b00000000000000) подаем данные (data_in=16'h000f). Вход сигнала разрешения должен быть всегда включен, так как иначе ничего
записывается (enable_a =1). сигнала синхронного сброса/установки ставим в ноль (SSRA=0) обойдемся пока без него.

*/

initial begin

#100
addres_a=14'b00000000000001;
data_in=16'h00ff;
//# 30 dip_a=2'b11;


#100 addres_a=14'b00000000000011;
data_in=16'h00f0;

// we_a = 0 запись не идет
// c этого момента хочу вытянуть значения из ячеек памяти, но ничего не выходит.
#100
we_a=0;
data_in=16'h0af;
addres_a = 14'b00000000000001;

# 200 addres_a = 14'b00000000000000;
data_in=16'h0005;

#200 addres_a = 14'b00000000000010;
end
endmodule

post-169113-0-37035900-1443692276_thumb.jpg

post-169113-0-64941800-1443692293_thumb.jpg

ramb18_2.pdf

Edited by krend

Share this post


Link to post
Share on other sites
Vascom    660

Покажи содержимое модуля schem.

И в даташиту написано, что wea не используется в режиме SDP.

Share this post


Link to post
Share on other sites
krend    0

содержимое модуля schem

Дело в том, что я использую режим TDP (true dual port), а не SDP(simple dual port). как я понял, в режиме SDP используется две шины данных для передачи одного значения на выход.

также нашел вот такой вот мануал (прикреплен к сообщению). вроде со своей стороны ошибки не заметил. При we = 0 и при подаче на вход адреса на выход должно подаваться данные по указанному адресу.

////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 1995-2013 Xilinx, Inc. All rights reserved.
////////////////////////////////////////////////////////////////////////////////
// ____ ____
// / /\/ /
// /___/ \ / Vendor: Xilinx
// \ \ \/	 Version : 14.6
// \ \		 Application : sch2hdl
// / /		 Filename : schem.vf
// /___/ /\	 Timestamp : 10/01/2015 14:54:59
// \ \ / \
// \___\/\___\
//
//Command: C:\Xilinx\14.6\ISE_DS\ISE\bin\nt\unwrapped\sch2hdl.exe -sympath C:/23/project_28_09_priemnik/ipcore_dir -intstyle ise -family virtex5 -verilog schem.vf -w C:/23/project_28_09_priemnik/schem.sch
//Design Name: schem
//Device: virtex5
//Purpose:
// This verilog netlist is translated from an ECS schematic.It can be
// synthesized and simulated, but it should not be modified.
//
`timescale 1ns / 1ps
module schem(addres_a,
		 clk,
		 data_in,
		 dip_a,
		 enable_a,
		 reg_a,
		 SSRA,
		 we_a,
		 dop_a,
		 out_A);
input [13:0] addres_a;
input clk;
input [15:0] data_in;
input [1:0] dip_a;
input enable_a;
input reg_a;
input SSRA;
input [1:0] we_a;
output [1:0] dop_a;
output [15:0] out_A;


RAMB18 #(

	 .INITP_00(256'h0000000000000000000000000000000000000000000000000000000000000000),

	 .INITP_01(256'h0000000000000000000000000000000000000000000000000000000000000000),
	 .DOA_REG(0), .WRITE_MODE_A("READ_FIRST"),

	 .INITP_02(256'h0000000000000000000000000000000000000000000000000000000000000000),
	 .INIT_A(18'h00000), .READ_WIDTH_A(9), .SRVAL_A(18'h00000),

	 .INITP_03(256'h0000000000000000000000000000000000000000000000000000000000000000),
	 .WRITE_WIDTH_A(9), .DOB_REG(0),


	 .INIT_00(256'h0000000000000000000000000000000000000000000000000000000000000000),



	 .INIT_01(256'h0000000000000000000000000000000000000000000000000000000000000000),



	 .INIT_02(256'h0000000000000000000000000000000000000000000000000000000000000000),



	 .INIT_03(256'h0000000000000000000000000000000000000000000000000000000000000000),



	 .INIT_04(256'h0000000000000000000000000000000000000000000000000000000000000000),



	 .INIT_05(256'h0000000000000000000000000000000000000000000000000000000000000000),



	 .INIT_06(256'h0000000000000000000000000000000000000000000000000000000000000000),



	 .INIT_07(256'h0000000000000000000000000000000000000000000000000000000000000000),



	 .INIT_08(256'h0000000000000000000000000000000000000000000000000000000000000000),



	 .INIT_09(256'h0000000000000000000000000000000000000000000000000000000000000000),



	 .INIT_0A(256'h0000000000000000000000000000000000000000000000000000000000000000),



	 .INIT_0B(256'h0000000000000000000000000000000000000000000000000000000000000000),



	 .INIT_0C(256'h0000000000000000000000000000000000000000000000000000000000000000),



	 .INIT_0D(256'h0000000000000000000000000000000000000000000000000000000000000000),



	 .INIT_0E(256'h0000000000000000000000000000000000000000000000000000000000000000),



	 .INIT_0F(256'h0000000000000000000000000000000000000000000000000000000000000000),



	 .INIT_10(256'h0000000000000000000000000000000000000000000000000000000000000000),



	 .INIT_11(256'h0000000000000000000000000000000000000000000000000000000000000000),



	 .INIT_12(256'h0000000000000000000000000000000000000000000000000000000000000000),



	 .INIT_13(256'h0000000000000000000000000000000000000000000000000000000000000000),



	 .INIT_14(256'h0000000000000000000000000000000000000000000000000000000000000000),



	 .INIT_15(256'h0000000000000000000000000000000000000000000000000000000000000000),



	 .INIT_16(256'h0000000000000000000000000000000000000000000000000000000000000000),



	 .INIT_17(256'h0000000000000000000000000000000000000000000000000000000000000000),



	 .INIT_18(256'h0000000000000000000000000000000000000000000000000000000000000000),



	 .INIT_19(256'h0000000000000000000000000000000000000000000000000000000000000000),



	 .INIT_1A(256'h0000000000000000000000000000000000000000000000000000000000000000),



	 .INIT_1B(256'h0000000000000000000000000000000000000000000000000000000000000000),



	 .INIT_1C(256'h0000000000000000000000000000000000000000000000000000000000000000),



	 .INIT_1D(256'h0000000000000000000000000000000000000000000000000000000000000000),



	 .INIT_1E(256'h0000000000000000000000000000000000000000000000000000000000000000),



	 .INIT_1F(256'h0000000000000000000000000000000000000000000000000000000000000000),



	 .INIT_20(256'h0000000000000000000000000000000000000000000000000000000000000000),



	 .INIT_21(256'h0000000000000000000000000000000000000000000000000000000000000000),



	 .INIT_22(256'h0000000000000000000000000000000000000000000000000000000000000000),



	 .INIT_23(256'h0000000000000000000000000000000000000000000000000000000000000000),



	 .INIT_24(256'h0000000000000000000000000000000000000000000000000000000000000000),



	 .INIT_25(256'h0000000000000000000000000000000000000000000000000000000000000000),



	 .INIT_26(256'h0000000000000000000000000000000000000000000000000000000000000000),



	 .INIT_27(256'h0000000000000000000000000000000000000000000000000000000000000000),



	 .INIT_28(256'h0000000000000000000000000000000000000000000000000000000000000000),



	 .INIT_29(256'h0000000000000000000000000000000000000000000000000000000000000000),



	 .INIT_2A(256'h0000000000000000000000000000000000000000000000000000000000000000),



	 .INIT_2B(256'h0000000000000000000000000000000000000000000000000000000000000000),



	 .INIT_2C(256'h0000000000000000000000000000000000000000000000000000000000000000),



	 .INIT_2D(256'h0000000000000000000000000000000000000000000000000000000000000000),



	 .INIT_2E(256'h0000000000000000000000000000000000000000000000000000000000000000),



	 .INIT_2F(256'h0000000000000000000000000000000000000000000000000000000000000000),



	 .INIT_30(256'h0000000000000000000000000000000000000000000000000000000000000000),



	 .INIT_31(256'h0000000000000000000000000000000000000000000000000000000000000000),



	 .INIT_32(256'h0000000000000000000000000000000000000000000000000000000000000000),



	 .INIT_33(256'h0000000000000000000000000000000000000000000000000000000000000000),



	 .INIT_34(256'h0000000000000000000000000000000000000000000000000000000000000000),



	 .INIT_35(256'h0000000000000000000000000000000000000000000000000000000000000000),



	 .INIT_36(256'h0000000000000000000000000000000000000000000000000000000000000000),



	 .INIT_37(256'h0000000000000000000000000000000000000000000000000000000000000000),



	 .INIT_38(256'h0000000000000000000000000000000000000000000000000000000000000000),



	 .INIT_39(256'h0000000000000000000000000000000000000000000000000000000000000000),



	 .INIT_3A(256'h0000000000000000000000000000000000000000000000000000000000000000),



	 .INIT_3B(256'h0000000000000000000000000000000000000000000000000000000000000000),



	 .INIT_3C(256'h0000000000000000000000000000000000000000000000000000000000000000),



	 .INIT_3D(256'h0000000000000000000000000000000000000000000000000000000000000000),



	 .INIT_3E(256'h0000000000000000000000000000000000000000000000000000000000000000),



	 .INIT_3F(256'h0000000000000000000000000000000000000000000000000000000000000000),
	 .INIT_B(18'h00000),


	 .INITP_04(256'h0000000000000000000000000000000000000000000000000000000000000000),



	 .INITP_05(256'h0000000000000000000000000000000000000000000000000000000000000000),



	 .INITP_06(256'h0000000000000000000000000000000000000000000000000000000000000000),



	 .INITP_07(256'h0000000000000000000000000000000000000000000000000000000000000000),
	 .INIT_FILE("NONE"), .READ_WIDTH_B(0), .SIM_COLLISION_CHECK("ALL"),
	 .SRVAL_B(18'h00000), .WRITE_MODE_B("WRITE_FIRST"), .WRITE_WIDTH_B(0) )
	 XLXI_1 (.ADDRA(addres_a[13:0]),
			 .ADDRB(),
			 .CLKA(clk),
			 .CLKB(),
			 .DIA(data_in[15:0]),
			 .DIB(),
			 .DIPA(dip_a[1:0]),
			 .DIPB(),
			 .ENA(enable_a),
			 .ENB(),
			 .REGCEA(reg_a),
			 .REGCEB(),
			 .SSRA(SSRA),
			 .SSRB(),
			 .WEA(we_a[1:0]),
			 .WEB(),
			 .DOA(out_A[15:0]),
			 .DOB(),
			 .DOPA(dop_a[1:0]),
			 .DOPB());
endmodule

ug190_1.pdf

Share this post


Link to post
Share on other sites

Бюджетные Wi-Fi-/ Bluetooth-решения для IoT-применения

Обзор основной линейки поставок и новинок Espressif Systems – экономически выгодных SoC Wi-Fi-/ Bluetooth-чипов и модулей для IoT-применений: от простых портативных устройств до промышленных решений

Подробнее...

Vascom    660

Если память двухпортовая, то адрес для записи и адрес для чтения подаются по разным шинам. В этом весь смысл двухпортовости.

Share this post


Link to post
Share on other sites
krend    0

я думал, что смысл двухпортовости в том, что я могу параллельно в одну память по двум разным шинам данных (и шинам адреса) либо вынимать данные из ОЗУ, либо записывать их в ОЗУ. при этом у меня есть возможность ставить приоритет для каждой отдельной шины - WRITE_MODE_A("READ_FIRST"), WRITE_MODE_B("WRITE_FIRST"). При вашем описании блока рам данные свойства теряют смысл.

Переделал на скорую руку схему, как вы сказали результат прежний...

// Verilog test fixture created from schematic C:\23\project_28_09_priemnik\schem.sch - Wed Dec 31 23:30:50 2008
`timescale 1ns / 1ps
module schem_schem_sch_tb();
// Inputs
  reg [13:0] addres_a;
  reg enable_a;
  reg clk;
reg [15:0] data_in;
reg[1:0] we_a;
reg [1:0] dip_a;
reg reg_a;
reg SSRA;
reg [13:0] adr_B;
reg [1:0] we_B;
// Output
wire [1:0] dop_a;
  wire [15:0] out_A;
wire [15:0] out_B;
// Instantiate the UUT
  schem UUT (
.SSRA(SSRA),
.reg_a(reg_a),
.dop_a(dop_a),
.dip_a(dip_a),
 .addres_a(addres_a),
 .out_A(out_A),
 .enable_a(enable_a),
 .clk(clk),
 .data_in(data_in),
 .we_a(we_a),
 .adr_B(adr_,
 .out_B(out_,
 .we_B(we_
  );
// Initialize Inputs

   initial begin
 addres_a = 14'b00000000000000;  // 14-ти разрядная шина адреса порта А
 enable_a =1;	    // вход сигнала разрешения первого порта
 clk = 0;		 // тактовый сигнал
 data_in=16'h000f;	  // входные 16-ти разрядные шины данных
 we_a=2'b11;		  // 2 разрядный вход, объединяющий сигналы разрешения записи соответствующего байта данных в первый порт
 dip_a=2'b00;	    // 2 разрядная входная шина, применяемая для осуществления контроля четности информационных данных первого порта
 reg_a=0;		 // вход сигнала разрешения синхронизации выходного регистра первого порта
 SSRA=0;		  // вход сигнала синхронного сброса/установки первого порта
 adr_B= 14'b00000000000000;
 we_B=2'b00;
 end

always begin
#5 clk=!clk;
end

/*
начальные установки такие ставим RAMB18  на запись (we_a=2'b11 - запись идет в два байта, хотя мои данные можно записывать и в один байт)
в первую ячейку памяти (addres_a = 14'b00000000000000) подаем данные (data_in=16'h000f). Вход сигнала разрешения должен быть всегда включен, так как иначе ничего
записывается (enable_a =1).  сигнала синхронного сброса/установки ставим в ноль (SSRA=0) обойдемся пока без него.

*/

initial begin

#100
addres_a=14'b00000000000001;
data_in=16'h00ff;
//# 30 dip_a=2'b11;


#100 addres_a=14'b00000000000011;
data_in=16'h00f0;

// we_a = 0  запись не идет
// c этого момента хочу вытянуть значения из ячеек памяти, но ничего не выходит.
#100
we_a=0; 
data_in=16'h0af;
addres_a = 14'b00000000000001;

# 200
adr_B = 14'b00000000000001;
addres_a=14'b00000000000011;
data_in=16'h0005;

#200
adr_B = 14'b00000000000011;
addres_a=14'b00000000000001;
end
endmodule

post-169113-0-48792500-1443704821_thumb.jpg

post-169113-0-02012000-1443704830_thumb.jpg

Share this post


Link to post
Share on other sites

Управляемый свет интернета вещей: Philips и протокол DALI 2.0

Полностью программируемые драйверы Philips Xitanium поддерживают все варианты регулировки яркости света и силы тока. Надежность системы значительно повышается при интеллектуальном мониторинге температуры светодиодного источника света. Разнообразие моделей в семействе обеспечивает максимальную гибкость в настройке рабочих параметров.

Подробнее...

Vascom    660

Попробуй сделать модуль не из схемы, а мастером создания блочной памяти.

Share this post


Link to post
Share on other sites
krend    0

в ip core все получилось, как нужно. Но нужно довести дело до конца с ramb18...

нужна single port ram.

// Verilog test fixture created from schematic C:\23\project_28_09_priemnik\bram_ip_core.sch - Fri Oct 02 10:49:27 2015
`timescale 1ns / 1ps
module bram_ip_core_bram_ip_core_sch_tb();
// Inputs
reg [3:0] addr;
reg wea;
reg clk;
reg en_a;
reg [15:0] din;
// Output
wire [15:0] out_A;

// Instantiate the UUT
bram_ip_core UUT (.addr(addr),
.din(din),
.en_a(en_a),
.wea(wea),
.clk(clk),
.out_A(out_A)
);
// Initialize Inputs
 initial begin
en_a=1;
wea=1;
clk=0;
din=16'h000f;
addr=4'b0001;

end


always
#5 clk=!clk;


initial begin
# 100
wea=0;
din=16'h00ff;
addr=4'b0001;

end


endmodule

post-169113-0-88588200-1443774145_thumb.jpg

post-169113-0-59337000-1443774151_thumb.jpg

Share this post


Link to post
Share on other sites
Vascom    660

Раз получилось, то так и используй. Он же тебе сгенерил файлы все.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now


  • Сообщения

    • Так Черкалин сын египетских фараонов. Однажды он пошел обменивать валюту на рубли - там его и взяли
    • Светодиод работает как стабилитрон и ему нужен ток. Напряжение на нем будет слабо меняться
    • НАГЛЯДНАЯ арифметика, правда, не юмор...
    • И я добил его, повторяться не буду, всё уже описывал, 30V - 1.5A v16y2.lay6
    • @Starichok Зачем выбрасывать драйвер? У тяжелых полевиков емкость затвора около 5000 пФ, плюс минус. Другое дело, что его реализовать по другому надо.
    • Это общеизвестная истина: все правдорезы, столпошататели и гражданские активисты всегда говорят "это не я" (в небратском варианте "а нас за що?"), когда наступает период ответственности за содеянное. Некоторые, как ты, говорят это заранее, чтобы наперед обезопасить себя, есличо  Ты меня не удивил.
    • Алексей! Наш Васильич - "мастер" рекламы. И, хотя корректор можно сделать с  очень приятным и приличным звуком, на "супер" он, всё же,  не тянет. Максимум, в обалденном  корпусе, с хорошей комплектацией, четко отстроенный -ну, на штуку уе). А за пару сотен приобрести -вообще, не проблема, сам Васильич продавал по 250.   А учитывая, что много умельцев наскоро  "сбацали" схему, не особенно заморачиваясь с результатом (имею ввиду ЗВУК), интернет полон  конструкций с ценой от 50...60 у.е. (т.е выбросить, вроде бы жалко -может кто хоть за это заберет).  Верить многочисленным отзывам (мало ли что на заборах пишут) тоже не айс - сам убедился.  Поэтому  много хороших отзывов (на фоне встроенных ФК средненьких аппаратов, он, по-любому играет лучше),  так и много отрицательных - неподтвержденные  ожидания, особенно с высококлассной аппаратурой,  и(или) с халтурным изготовлением, часто  и основанным на  лавине восхищения, типа "Вау!  Поковырялся в ящике, спаял за полчаса  - и всё супер-супер-супер".  Изготовление требует  аккуратного  подбора ламп и остальной комплектации -не обязательно дорогой, но не "из мусорного ведра".  Ну, и настройка, само-собой, хотя при точном соответствии номиналам схемы АЧХ получается правильная. Лампы -не проблема, любые. (погуглить или  - https://www.einfo.ru)Правда, из-за возросшего спроса цена на 17-16 -е лампы выросла в несколько раз.  Продавцы, просто таки обязаны проставиться Васильичу.   И, попытки улучшить  неизбежно приводят к другим, более сложным конструкциям. Но это -другая тема. И. Кстати.  Мое мнение -не навязываю, но все больше убеждаюсь, что изготовление блока питания требует не меньше внимания, а то и больше как в части внимания, так и количества напряжений.