
Сообщение от
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
[свернуть]