stack design

D

Deepa

Guest
como criar uma pilha com base operação push pop n .. apenas com flip-flops, e sinais de controle

 
No mínimo o seu desenho deve ter.
Portas de entrada:
RD (pop), wr (push), wr_data [x: 0], RST, Clk

Portas de saída:
rd_data [x: 0], cheios, vazios, erro

Regs interno:
stack_ptr [1 y: 0], matriz de registros ou um bloco de memória para armazenar dados (dependendo dos requisitos de tempo)

Onde
x = largura do barramento que é exigido do seu stack,
2 de alimentação (de) y é o deapth da pilha.

A largura stack_ptr é feita 1 vez, sempre que o MSB está definido você sabe a pilha encontrou ler antes de escrever erro.

Bom começo de design e deixe-nos saber os desafios que enfrentam.Não quero dar o código e matar qualquer oppurtunities para você projetar / aprender.Happy coding.

 
Aqui está um exemplo de implementação pilha usando registradores de deslocamento_Overflow e
underflow bandeiras não são adicionados pela simplicidade.Pode-se também implementar pilha
com memória e um contador.Consulte a JP Hayes, Computer Architecture and Organization.
Espero que isso ajude!

Código:

módulo de pilha (

/ / Outputs

dout,

/ / Entradas

clk, reset, din, push, pop

);

input clk, reset;

input [7:0] din;

output [7:0] dout;

Push de entrada, pop;reg [15:0] shift_reg [7:0];

atribuir shift_reg dout = ([0] [0],

shift_reg [1] [0],

shift_reg [2] [0],

shift_reg [3] [0],

shift_reg [4] [0],

shift_reg [5] [0],

shift_reg [6] [0],

shift_reg [7] [0]);always @ (clk posedge ou redefinir posedge) começam

if (reset) começar

shift_reg [0] <= 0;

shift_reg [1] <= 0;

shift_reg [2] <= 0;

shift_reg [3] <= 0;

shift_reg [4] <= 0;

shift_reg [5] <= 0;

shift_reg [6] <= 0;

shift_reg [7] <= 0;

end else begin

if (push) começar

shift_reg [0] <= (shift_reg [0] [14:0], din [0]);

shift_reg [1] <= (shift_reg [1] [14:0], din [1]);

shift_reg [2] <= (shift_reg [2] [14:0], din [2]);

shift_reg [3] <= (shift_reg [3] [14:0], din [3]);

shift_reg [4] <= (shift_reg [4] [14:0], din [4]);

shift_reg [5] <= (shift_reg [5] [14:0], din [5]);

shift_reg [6] <= (shift_reg [6] [14:0], din [6]);

shift_reg [7] <= (shift_reg [7] [14:0], din [7]);

end else if (pop) começar

shift_reg [0] <= (1'b0, shift_reg [0] [15:1]);

shift_reg [1] <= (1'b0, shift_reg [1] [15:1]);

shift_reg [2] <= (1'b0, shift_reg [2] [15:1]);

shift_reg [3] <= (1'b0, shift_reg [3] [15:1]);

shift_reg [4] <= (1'b0, shift_reg [4] [15:1]);

shift_reg [5] <= (1'b0, shift_reg [5] [15:1]);

shift_reg [6] <= (1'b0, shift_reg [6] [15:1]);

shift_reg [7] <= (1'b0, shift_reg [7] [15:1]);

fim

fim

fim

endmodule / / pilha
 

Welcome to EDABoard.com

Sponsor

Back
Top