Большой мультиплексор с л oop в Verilog - PullRequest
1 голос
/ 20 марта 2020

Я хочу, чтобы моя схема записывала значение от 0 10 до 255 10 в регистр с именем mem_address_reg в зависимости от входящего адреса. После операции и этот адрес может принимать одно из 256 10 различных значений. Я хочу, чтобы схема была комбинационной, поэтому один из способов проверить это значение - построить мультиплексор с 256 10 различными входами, который затем записывает один из них на выход, в зависимости от входящего адреса (строка выбора мультиплексора).

Эта схема работает, но требует, чтобы я написал скрипт, который генерирует все 256 10 case-операторов, и код становится раздутым. Поэтому вместо того, чтобы писать каждую строку самостоятельно, я хочу использовать для l oop, который генерирует их для меня. К сожалению, это не похоже на работу.

Что я сделал не так?

Рабочая схема с раздутым кодом:

wire [31:0] masked_write_adr;
reg  [29:0] nvmm_write_request_adr;
reg  [7:0]  mem_address_reg;     

assign masked_write_adr = {2'b00, nvmm_write_request_adr} & 32'hFFC0_0000;

always@(*)
begin
    case(masked_write_adr)
      32'h0000_0000:  mem_address_reg = 8'h00;
      32'h0040_0000:  mem_address_reg = 8'h01;
      32'h0080_0000:  mem_address_reg = 8'h02;
      32'h00C0_0000:  mem_address_reg = 8'h03;
      32'h0100_0000:  mem_address_reg = 8'h04;
      32'h0140_0000:  mem_address_reg = 8'h05;
      (...)
      32'h3FC0_0000:  mem_address_reg = 8'hFF;
      default:        mem_address_reg = 8'h0;
    endcase
end

Это то, что я считал аналоговой схемой, которая не работает:

wire [31:0] masked_write_adr;
reg  [29:0] nvmm_write_request_adr;
reg  [7:0]  mem_address_reg;     

assign masked_write_adr = {2'b00, nvmm_write_request_adr} & 32'hFFC0_0000;

integer k;
always@(*)
begin
  mem_address_reg <= 8'h00;
  for(k=0; k<255; k=k+1)
  begin
      if((k*32'h40_0000) == masked_write_adr)
        mem_address_reg <= k;
  end              
end

1 Ответ

4 голосов
/ 20 марта 2020

просто сделай

assign mem_address_reg = masked_write_addr[29:22];
...