我希望我的电路根据输入地址将0 10和255 10之间的值写入称为mem_address_reg
的寄存器。经过“与”运算后,该地址可以采用256 10个不同的值之一。我希望电路是组合的,所以一种检查值的方法是用256 10个不同的输入构建一个多路复用器,然后根据传入地址(输入的选择线)将其中之一写入输出。多路复用器)。
此电路有效,但需要我编写一个脚本,该脚本生成所有256 10案例陈述,并且代码肿。因此,我不想使用自己编写每一行的方法,而是使用for循环为我生成这些行。不幸的是,这似乎不起作用。
我做错了什么?
带有circuit肿代码的工作电路:
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
只是做
assign mem_address_reg = masked_write_addr[29:22];