Контроллер статической памяти на ПЛИС
- Сообщения: 46
- Зарегистрирован: Вт дек 02, 2008 15:25:53
Уважаемые участники форума,подскажите как реализовать контроллер статической памяти начинающему ПЛИСоводу,как допустим релизовать необходимые временные задержки управляющих сигналов,выставление на необходимые линии адресов и данных.
- Реклама
- Сообщения: 21
- Зарегистрирован: Ср окт 29, 2008 12:23:21
- Сообщения: 21
- Зарегистрирован: Ср окт 29, 2008 12:23:21
- Сообщения: 46
- Зарегистрирован: Вт дек 02, 2008 15:25:53
К сожалению страница не открываетсяСтарый Бабай писал(а):посмотри тут
http://www.asic-world.com/examples/sy ... sr_sw.html
- Сообщения: 21
- Зарегистрирован: Ср окт 29, 2008 12:23:21
Код: Выделить всё
1 //=======
2 // Function : Synchronous read write RAM
3 // Coder : Deepak Kumar Tala
4 // Date : 1-Nov-2005
5 //=======
6 module ram_sp_sr_sw #(parameter DATA_WIDTH = 8,
7 parameter ADDR_WIDTH = 8,
8 parameter RAM_DEPTH = (1 << ADDR_WIDTH))(
9 input wire clk , // Clock Input
10 input wire [ADDR_WIDTH-1:0] address , // Address Input
11 inout wire [DATA_WIDTH-1:0] data , // Data bi-directional
12 input wire cs , // Chip Select
13 input wire we , // Write Enable/Read Enable
14 input wire oe // Output Enable
15 );
16 //--------------Internal variables----------------
17 reg [DATA_WIDTH-1:0] data_out ;
18 // Use Associative array to save memory footprint
19 typedef reg [ADDR_WIDTH-1:0] mem_addr;
20 reg [DATA_WIDTH-1:0] mem [mem_addr];
21
22 //--------------Code Starts Here------------------
23 // Tri-State Buffer control
24 // output : When we = 0, oe = 1, cs = 1
25 assign data = (cs && oe && ! we) ? data_out : 8'bz;
26
27 // Memory Write Block
28 // Write Operation : When we = 1, cs = 1
29 always @ (posedge clk)
30 begin : MEM_WRITE
31 if ( cs && we ) begin
32 mem[address] = data;
33 end
34 end
35
36 // Memory Read Block
37 // Read Operation : When we = 0, oe = 1, cs = 1
38 always @ (posedge clk)
39 begin : MEM_READ
40 if (cs && ! we && oe) begin
41 data_out = mem[address];
42 end
43 end
44
45 endmodule // End of Module ram_sp_sr_sw
- Реклама
- Сообщения: 46
- Зарегистрирован: Вт дек 02, 2008 15:25:53
ЕРМ3128АТС100-10,язык VerilogСтарый Бабай писал(а):Какая плисина?
И в чем пишешь?
Verilog или VHDL?
- Сообщения: 46
- Зарегистрирован: Вт дек 02, 2008 15:25:53
- Сообщения: 21
- Зарегистрирован: Ср окт 29, 2008 12:23:21
- Сообщения: 20
- Зарегистрирован: Пн окт 27, 2008 22:11:28
- Сообщения: 21
- Зарегистрирован: Ср окт 29, 2008 12:23:21
- Сообщения: 46
- Зарегистрирован: Вт дек 02, 2008 15:25:53
к сожалению нет.Старый Бабай писал(а):Не за что.
Встречный вопрос - SPI на veriloge не делал?
- Сообщения: 20
- Зарегистрирован: Пн окт 27, 2008 22:11:28
- Сообщения: 46
- Зарегистрирован: Вт дек 02, 2008 15:25:53
Извините за поздно "сгенерированный" вопрос,но все-таки..Старый Бабай писал(а):Код: Выделить всё
1 //======= 2 // Function : Synchronous read write RAM 3 // Coder : Deepak Kumar Tala 4 // Date : 1-Nov-2005 5 //======= 6 module ram_sp_sr_sw #(parameter DATA_WIDTH = 8, 7 parameter ADDR_WIDTH = 8, 8 parameter RAM_DEPTH = (1 << ADDR_WIDTH))( 9 input wire clk , // Clock Input 10 input wire [ADDR_WIDTH-1:0] address , // Address Input 11 inout wire [DATA_WIDTH-1:0] data , // Data bi-directional 12 input wire cs , // Chip Select 13 input wire we , // Write Enable/Read Enable 14 input wire oe // Output Enable 15 ); 16 //--------------Internal variables---------------- 17 reg [DATA_WIDTH-1:0] data_out ; 18 // Use Associative array to save memory footprint 19 typedef reg [ADDR_WIDTH-1:0] mem_addr; 20 reg [DATA_WIDTH-1:0] mem [mem_addr]; 21 22 //--------------Code Starts Here------------------ 23 // Tri-State Buffer control 24 // output : When we = 0, oe = 1, cs = 1 25 assign data = (cs && oe && ! we) ? data_out : 8'bz; 26 27 // Memory Write Block 28 // Write Operation : When we = 1, cs = 1 29 always @ (posedge clk) 30 begin : MEM_WRITE 31 if ( cs && we ) begin 32 mem[address] = data; 33 end 34 end 35 36 // Memory Read Block 37 // Read Operation : When we = 0, oe = 1, cs = 1 38 always @ (posedge clk) 39 begin : MEM_READ 40 if (cs && ! we && oe) begin 41 data_out = mem[address]; 42 end 43 end 44 45 endmodule // End of Module ram_sp_sr_sw


