User Tag List

Показано с 1 по 10 из 202

Тема: SQRUM 1M

Древовидный режим

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #11

    Регистрация
    20.01.2016
    Адрес
    п. Власиха, Московская обл.
    Сообщений
    594
    Спасибо Благодарностей отдано 
    6
    Спасибо Благодарностей получено 
    41
    Поблагодарили
    22 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от HardWareMan Посмотреть сообщение
    EvgenRU, а ты покажи пример схемного ввода и я покажу твои косяки.
    Ну, я взял из стандартной схемы кворума

    Удалось даже немного упростить
    Код:
    // latch pixels, pixel shift
    always @(negedge OSC)
    	if(DC2n & DC1 & DC0)
    		SHIFT_REG <= 202;//MD;
    	else
    		SHIFT_REG <= SHIFT_REG << 1;
    Цитата Сообщение от omercury Посмотреть сообщение
    Также нежелательно использовать для регистров блокирующее присвоение. ( "=" вместо "<=" )
    Я тут почитал http://asdasd.rpg.fi/~svo/verilog/assignments/ и как-то уже не на 100% уверен в этом, т.к. синтезатор всё-равно сам всё сделает в этом случае.

    PS: ПЗУ могу помочь зашить или подарить зашитое, при желании.

    PS2: вот еще мультиплексор РАБОЧИЙ!

    Скрытый текст

    Код:
    module ZX_mux(
    	input wire [4:0] H,		// horizontal counter
    	input wire [7:0] V,		// vertical counter
    	input wire [19:14] RAM,	// Muxed Extended RAM address
    	input wire [15:0] A,	// Z80 adderss
    	input wire S0,			// RAS
    	input wire DC1,			// H1
    	input wire DC2,			// H2
    	input wire SCR,			// Second SCREEN (128k)
    	input wire CLK,			// CLOCK signal 14MHZ
    	output reg [9:0] MA
    );
    
    always @(negedge CLK)
    begin
    //-----------------------
    // S0 - RAS
    // DC1 - 0=CPU/1=VIDEO
    // DC2 - 0=PIXELS/1=ATTR
    //-----------------------
    	if(DC1)
    	begin
    		// VIDEO CONTROLLER ADDRESSES
    		// screen area address + DRAM refresh
    		if(S0)
    		begin  // SELECT B
    			// screen area row address
    			MA[0] <= 1;
    			MA[1] <= 1;
    			MA[2] <= 0;
    			if(DC2)
    			begin
    				// Attributes
    				MA[3] <= 0;
    				MA[4] <= 1;
    				MA[5] <= 1;
    			end
    			else
    			begin
    				// pixels
    				MA[3] <= V[2];
    				MA[4] <= V[6];
    				MA[5] <= V[7];
    			end
    			MA[6] <= 0;
    			MA[7] <= 0;//SCR;
    			MA[8] <= 0;
    			MA[9] <= 0;
    		end
    		else
    		begin // SELECT A
    			// screen area column address
    			MA[4:0] <= H[4:0];
    			MA[7:5] <= V[5:3];
    			if(DC2)
    			begin
    				// attributes
    				MA[8] <= V[6];
    				MA[9] <= V[7];
    			end
    			else
    			begin
    				//pixels
    				MA[8] <= V[0];
    				MA[9] <= V[1];
    			end
    		end
    	end
    	else
    	begin
    		// CPU ADDRESSES
    		// memory address
    		if(S0)
    		begin // SELECT B
    			// memory row address
    			MA[0] <= RAM[14];
    			MA[1] <= RAM[16];
    			MA[2] <= RAM[18];
    			MA[6:3] <= A[13:10];
    			MA[7] <= RAM[15];			
    			MA[8] <= RAM[17];
    			MA[8] <= RAM[19];
    		end
    		else
    		begin // SELECT A
    			// memory column address
    			MA[9:0] <= A[9:0];
    		end
    	end
    end
    
    endmodule
    [свернуть]



    PS3: вот еще буферы

    Скрытый текст

    Код:
    module ZX_buf(
    	input RAMWEn,
    	input RAMCSn,
    	input DC0,
    	input DC1n,
    	inout [7:0] D,
    	inout [7:0] MD
    );
    
    reg [7:0] wr_buf;
    wire wrbuf = DC0 & DC1n;
    
    assign MD = RAMWEn ? 8'bZZZZZZZZ : D;
    assign D  = RAMCSn ? 8'bZZZZZZZZ : wr_buf;
    
    always @ (posedge wrbuf)
        wr_buf <= MD;
    
    endmodule
    [свернуть]
    Последний раз редактировалось EvgenRU; 02.04.2017 в 17:13.

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •