数字电路设计之低功耗设计方法二:memory-partition

2023-11-13

        Memory-partition是在进行内存寻址进行读或者写数据的时候,我们寻找地址一般是全部比较一遍,但是我们可以就是先比较第一位,然后在比较接下来的位数。这样就减少了近一般的内存访问次数,大大降低了功耗。  

    在这里,我定义了地址空间为十六,字长也为十六的内存mem。这个内存是有读和写的功能。首先向内存mem中写入数据,然后再读数据。我们的memory-partition主要是在寻址的时候通过分成两段来减少动态功耗。


有memory-partition的代码:

module memory2(
         clr,          //reset
         clk,          //clock
         address,      //address for read or write      
         read_en,      //read enable
         write_en,     //写使能
         read_data,    //读使能
         write_data    //读的数据
 );
 
input wire  clr;                    //reset
input wire  clk;                    //clock
input wire  [3:0]address;           //address for read or write      
input wire  read_en;                //read_enable signal
input wire  write_en;               //write_enable signal
output reg  [15:0]read_data;        //the data you read from the memory
input wire  [15:0]write_data;      //write data to memory

reg [15:0]mem[15:0];                //get a 16*16's memory


always@(posedge clr,posedge clk)
begin
if(clr)
   begin
        mem[0]  <= 16'b0;
        mem[1]  <= 16'b0;
        mem[2]  <= 16'b0;
        mem[3]  <= 16'b0;
        mem[4]  <= 16'b0;
        mem[5]  <= 16'b0;
        mem[6]  <= 16'b0;
        mem[7]  <= 16'b0;
        mem[8]  <= 16'b0;
        mem[9]  <= 16'b0;
        mem[10] <= 16'b0;
        mem[11] <= 16'b0;
        mem[12] <= 16'b0;
        mem[13] <= 16'b0;
        mem[14] <= 16'b0;
        mem[15] <= 16'b0;
end
else if(write_en == 1'b1)
   begin
  if(address[3] == 1'b0)
begin
     if(address[2:0] == 3'b000)
         mem[0] <= write_data;
  else if(address[2:0] == 3'b001)
         mem[1] <= write_data;
  else if(address[2:0] == 3'b010)
         mem[2] <= write_data;
  else if(address[2:0] == 3'b011)
         mem[3] <= write_data;
  else if(address[2:0] == 3'b100)
         mem[4] <= write_data;
  else if(address[2:0] == 3'b101)
         mem[5] <= write_data;
  else if(address[2:0] == 3'b110)
         mem[6] <= write_data;
  else if(address[2:0] == 3'b111)
         mem[7] <= write_data;
      end
      else
      begin
  if(address[2:0] == 3'b000)
        mem[8] <= write_data;
  else if(address[2:0] == 3'b001)
        mem[9] <= write_data;
  else if(address[2:0] == 3'b010)
        mem[10]<= write_data;
  else if(address[2:0] == 3'b011)
        mem[11]<= write_data;
  else if(address[2:0] == 3'b100)
        mem[12] <= write_data;
  else if(address[2:0] == 3'b101)
        mem[13] <= write_data;
  else if(address[2:0] == 3'b110)
        mem[14] <= write_data;
  else
        mem[15] <= write_data;
      end
end
else
   begin
     mem[0] <= mem[0];
     mem[1] <= mem[1];
     mem[2] <= mem[2];
     mem[3] <= mem[3];
     mem[4] <= mem[4];
     mem[5] <= mem[5];
     mem[6] <= mem[6];
     mem[7] <= mem[7];
     mem[8] <= mem[8];
     mem[9] <= mem[9];
     mem[10]<= mem[10];
     mem[11]<= mem[11];
     mem[12]<= mem[12];
     mem[13]<= mem[13];
     mem[14]<= mem[14];
     mem[15]<= mem[15];
end
end


always@(posedge clr,posedge clk)
if(clr)
    read_data <= 16'b0;
else if(read_en == 1'b1)
   begin
  if(address[3] == 1'b0)
begin
     if(address[2:0] == 3'b000)
         read_data <= mem[0];
  else if(address[2:0] == 3'b001)
         read_data <= mem[1];
  else if(address[2:0] == 3'b010)
         read_data <= mem[2];
  else if(address[2:0] == 3'b011)
         read_data <= mem[3];
  else if(address[2:0] == 3'b100)
         read_data <= mem[4];
  else if(address[2:0] == 3'b101)
         read_data <= mem[5];
  else if(address[2:0] == 3'b110)
         read_data <= mem[6];
  else if(address[2:0] == 3'b111)
         read_data <= mem[7];
      end
      else
      begin
  if(address[2:0] == 3'b000)
        read_data <= mem[8];
  else if(address[2:0] == 3'b001)
        read_data <= mem[9];
  else if(address[2:0] == 3'b010)
        read_data <= mem[10];
  else if(address[2:0] == 3'b011)
        read_data <= mem[11];
  else if(address[2:0] == 3'b100)
        read_data <= mem[12];
  else if(address[2:0] == 3'b101)
        read_data <= mem[13];
  else if(address[2:0] == 3'b110)
        read_data <= mem[14];
  else
        read_data <= mem[15];
      end
end
else 
    read_data <= read_data;

endmodule


没有memory-partition的代码:

module memory(
         clr,          //reset
         clk,          //clock
         address,      //address for read or write      
         read_en,      //read enable
         write_en,     //写使能
         read_data,    //读使能
         write_data    //写的数据
 );
 
input wire  clr;                    //reset
input wire  clk;                    //clock
input wire  [3:0]address;           //address for read or write      
input wire  read_en;                //read_enable signal
input wire  write_en;               //write_enable signal
output reg  [15:0]read_data;        //the data you read from the memory
input wire  [15:0]write_data;      //write data to memory

reg [15:0]mem[15:0];                //get a 16*16's memory


always@(posedge clr,posedge clk)
begin
if(clr)
   begin
        mem[0]  <= 16'b0;
        mem[1]  <= 16'b0;
        mem[2]  <= 16'b0;
        mem[3]  <= 16'b0;
        mem[4]  <= 16'b0;
        mem[5]  <= 16'b0;
        mem[6]  <= 16'b0;
        mem[7]  <= 16'b0;
        mem[8]  <= 16'b0;
        mem[9]  <= 16'b0;
        mem[10] <= 16'b0;
        mem[11] <= 16'b0;
        mem[12] <= 16'b0;
        mem[13] <= 16'b0;
        mem[14] <= 16'b0;
        mem[15] <= 16'b0;
end
else if(write_en == 1'b1)
   begin
  if(address == 4'b0000)
      mem[0] <= write_data;
else if(address == 4'b0001)
      mem[1] <= write_data;
else if(address == 4'b0010)
      mem[2] <= write_data;
else if(address == 4'b0011)
      mem[3] <= write_data;
else if(address == 4'b0100)
      mem[4] <= write_data;
else if(address == 4'b0101)
      mem[5] <= write_data;
else if(address == 4'b0110)
      mem[6] <= write_data;
else if(address == 4'b0111)
      mem[7] <= write_data;
else if(address == 4'b1000)
      mem[8] <= write_data;
else if(address == 4'b1001)
      mem[9] <= write_data;
else if(address == 4'b1010)
      mem[10]<= write_data;
else if(address == 4'b1011)
      mem[11]<= write_data;
else if(address == 4'b1100)
      mem[12] <= write_data;
else if(address == 4'b1101)
      mem[13] <= write_data;
else if(address == 4'b1110)
      mem[14] <= write_data;
else
      mem[15] <= write_data;
end
else
   begin
        mem[0] <= mem[0];
        mem[1] <= mem[1];
        mem[2] <= mem[2];
        mem[3] <= mem[3];
        mem[4] <= mem[4];
        mem[5] <= mem[5];
        mem[6] <= mem[6];
        mem[7] <= mem[7];
        mem[8] <= mem[8];
        mem[9] <= mem[9];
        mem[10]<= mem[10];
        mem[11]<= mem[11];
        mem[12]<= mem[12];
        mem[13]<= mem[13];
        mem[14]<= mem[14];
       mem[15]<= mem[15];
end
end


always@(posedge clr,posedge clk)
if(clr)
    read_data <= 16'b0;
else if(read_en == 1'b1)
    begin
  if(address == 4'b0000)
      read_data <= mem[0];
else if(address == 4'b0001)
      read_data <= mem[1];
else if(address == 4'b0010)
      read_data <= mem[2];
else if(address == 4'b0011)
      read_data <= mem[3];
else if(address == 4'b0100)
      read_data <= mem[4];
else if(address == 4'b0101)
      read_data <= mem[5];
else if(address == 4'b0110)
      read_data <= mem[6];
else if(address == 4'b0111)
      read_data <= mem[7];
else if(address == 4'b1000)
      read_data <= mem[8];
else if(address == 4'b1001)
      read_data <= mem[9];
else if(address == 4'b1010)
      read_data <= mem[10];
else if(address == 4'b1011)
      read_data <= mem[11];
else if(address == 4'b1100)
      read_data <= mem[12];
else if(address == 4'b1101)
      read_data <= mem[13];
else if(address == 4'b1110)
      read_data <= mem[14];
else
      read_data <= mem[15];
end
else 
    read_data <= read_data;

endmodule


仿真代码:

module test;
// Inputs
reg clr;
reg clk;
reg [3:0] address;
reg read_en;
reg write_en;
reg [15:0] write_data;


// Outputs
wire [15:0] read_data;


// Instantiate the Unit Under Test (UUT)
memory uut (
.clr(clr), 
.clk(clk), 
.address(address), 
.read_en(read_en), 
.write_en(write_en), 
.read_data(read_data), 
.write_data(write_data)
);


`define gr0 4'b0000
`define gr1 4'b0001
`define gr2 4'b0010
`define gr3 4'b0011
`define gr4 4'b0100
`define gr5 4'b0101
`define gr6 4'b0110
`define gr7 4'b0111
`define gr8 4'b1000
`define gr9 4'b1001
`define gr10      4'b1010
`define gr11         4'b1011
`define gr12         4'b1100
`define gr13         4'b1101
`define gr14         4'b1110
`define gr15         4'b1111
 

   always #50
clk = ~clk;
   initial begin

   $dumpfile("memory.vcd");
   $dumpvars(1,test.uut);
   $display("mem1: mem2: mem3: mem4: mem5: mem6: mem7: mem8: mem9:mem10:mem11:mem12:mem13:mem14:mem15");
   $monitor("%h:%h:%h:%h:%h:%h:%h:%h:%h:%h:%h:%h:%h:%h:%h:%h", 
uut.mem[`gr0], uut.mem[`gr1],uut.mem[`gr2], uut.mem[`gr3],uut.mem[`gr4],uut.mem[`gr5], uut.mem[`gr6],uut.mem[`gr7],
uut.mem[`gr8], uut.mem[`gr9],uut.mem[`gr10], uut.mem[`gr11],uut.mem[`gr12], uut.mem[`gr13],uut.mem[`gr14],uut.mem[`gr15]);

// Initialize Inputs
clr        = 1;
clk        = 0;
read_en    = 0;
write_en   = 0;
write_data = 0;
                address    = 0;
// Wait 100 ns for global reset to finish
#100;
                write_en = 1;
clr      = 0;
// Add stimulus here
                #100;
address    <= `gr0;
write_data <= 16'hffff;
#100;
address    <= `gr1;
write_data <= 16'h00ff;
#100;
address    <= `gr2;
write_data <= 16'hff00;
#100;
address    <= `gr3;
write_data <= 16'h0ff0;
#100;
address    <= `gr4;
write_data <= 16'hf000;
#100;
address    <= `gr5;
write_data <= 16'h0f00;
#100;
address    <= `gr6;
write_data <= 16'h00f0;
#100;
address    <= `gr7;
write_data <= 16'h000f;
#100;
address    <= `gr8;
write_data <= 16'hff00;
#100;
address    <= `gr9;
write_data <= 16'hff11;
#100;
address    <= `gr10;
write_data <= 16'h1234;
#100;
address    <= `gr11;
write_data <= 16'hff11;
#100;
address    <= `gr12;
write_data <= 16'hff00;
#100;
address    <= `gr13;
write_data <= 16'h001f;
#100;
address    <= `gr14;
write_data <= 16'hf111;
#100;
address    <= `gr15;
write_data <= 16'habcd;
#100; 
write_en   <= 0; 
read_en    <= 1;
#100;
address    <= `gr15;
#100;
address    <= `gr14;
#100;
address    <= `gr13;
#100;
address    <= `gr12;
#100;
address    <= `gr11;
#100;
address    <= `gr10;
#100;
address    <= `gr9;
#100;
address    <= `gr8;
#100;
address    <= `gr7;
#100;
address    <= `gr6;
#100;
address    <= `gr5;
#100;
address    <= `gr4;
#100;
address    <= `gr3;
#100;
address    <= `gr2;
#100;
address    <= `gr1;
#100;
address    <= `gr0;
                #100;
write_en   <= 1;
read_en    <= 0;
#100;
address    <= `gr0;
write_data <= 16'hffff;
#100;
address    <= `gr1;
write_data <= 16'h00ff;
#100;
address    <= `gr2;
write_data <= 16'hef00;
#100;
address    <= `gr3;
write_data <= 16'hfff0;
#100;
address    <= `gr4;
write_data <= 16'hf0f0;
#100;
address    <= `gr5;
write_data <= 16'h0f00;
#100;
address    <= `gr6;
write_data <= 16'h0ff0;
#100;
address    <= `gr7;
write_data <= 16'h0002;
#100;
address    <= `gr8;
write_data <= 16'hffff;
#100;
address    <= `gr9;
write_data <= 16'h0000;
#100;
address    <= `gr10;
write_data <= 16'hff34;
#100;
address    <= `gr11;
write_data <= 16'hee11;
#100;
address    <= `gr12;
write_data <= 16'hffe0;
#100;
address    <= `gr13;
write_data <= 16'h0f1f;
#100;
address    <= `gr14;
write_data <= 16'hff11;
#100;
address    <= `gr15;
write_data <= 16'ha11d;
#100; 
write_en   <= 0; 
read_en    <= 1;
#100;
address    <= `gr15;
#100;
address    <= `gr14;
#100;
address    <= `gr13;
#100;
address    <= `gr12;
#100;
address    <= `gr11;
#100;
address    <= `gr10;
#100;
address    <= `gr9;
#100;
address    <= `gr8;
#100;
address    <= `gr7;
#100;
address    <= `gr6;
#100;
address    <= `gr5;
#100;
address    <= `gr4;
#100;
address    <= `gr3;
#100;
address    <= `gr2;
#100;
address    <= `gr1;
#100;
address    <= `gr0;
#100;
address    <= `gr15;
#100;
address    <= `gr14;
#100;
address    <= `gr13;
#100;
address    <= `gr12;
#100;
address    <= `gr11;
#100;
address    <= `gr10;
#100;
address    <= `gr9;
#100;
address    <= `gr8;
#100;
address    <= `gr7;
#100;
address    <= `gr6;
#100;
address    <= `gr5;
#100;
address    <= `gr4;
#100;
address    <= `gr3;
#100;
address    <= `gr2;
#100;
address    <= `gr1;
#100;
address    <= `gr0;
#100;
                write_en = 1;
clr      = 0;
// Add stimulus here
                #100;
address    <= `gr0;
write_data <= 16'hffff;
#100;
address    <= `gr1;
write_data <= 16'h00ff;
#100;
address    <= `gr2;
write_data <= 16'hff00;
#100;
address    <= `gr3;
write_data <= 16'h0ff0;
#100;
address    <= `gr4;
write_data <= 16'hf000;
#100;
address    <= `gr5;
write_data <= 16'h0f00;
#100;
address    <= `gr6;
write_data <= 16'h00f0;
#100;
address    <= `gr7;
write_data <= 16'h000f;
#100;
address    <= `gr8;
write_data <= 16'hff00;
#100;
address    <= `gr9;
write_data <= 16'hff11;
#100;
address    <= `gr10;
write_data <= 16'h1234;
#100;
address    <= `gr11;
write_data <= 16'hff11;
#100;
address    <= `gr12;
write_data <= 16'hff00;
#100;
address    <= `gr13;
write_data <= 16'h001f;
#100;
address    <= `gr14;
write_data <= 16'hf111;
#100;
address    <= `gr15;
write_data <= 16'habcd;

#100; 
write_en   <= 0; 
read_en    <= 1;
#100;
address    <= `gr15;
#100;
address    <= `gr14;
#100;
address    <= `gr13;
#100;
address    <= `gr12;
#100;
address    <= `gr11;
#100;
address    <= `gr10;
#100;
address    <= `gr9;
#100;
address    <= `gr8;
#100;
address    <= `gr7;
#100;
address    <= `gr6;
#100;
address    <= `gr5;
#100;
address    <= `gr4;
#100;
address    <= `gr3;
#100;
address    <= `gr2;
#100;
address    <= `gr1;
#100;
address    <= `gr0;
                #100;
write_en   <= 1;
read_en    <= 0;
#100;
address    <= `gr0;
write_data <= 16'hffff;
#100;
address    <= `gr1;
write_data <= 16'h00ff;
#100;
address    <= `gr2;
write_data <= 16'hef00;
#100;
address    <= `gr3;
write_data <= 16'hfff0;
#100;
address    <= `gr4;
write_data <= 16'hf0f0;
#100;
address    <= `gr5;
write_data <= 16'h0f00;
#100;
address    <= `gr6;
write_data <= 16'h0ff0;
#100;
address    <= `gr7;
write_data <= 16'h0002;
#100;
address    <= `gr8;
write_data <= 16'hffff;
#100;
address    <= `gr9;
write_data <= 16'h0000;
#100;
address    <= `gr10;
write_data <= 16'hff34;
#100;
address    <= `gr11;
write_data <= 16'hee11;
#100;
address    <= `gr12;
write_data <= 16'hffe0;
#100;
address    <= `gr13;
write_data <= 16'h0f1f;
#100;
address    <= `gr14;
write_data <= 16'hff11;
#100;
address    <= `gr15;
write_data <= 16'ha11d;
#100; 
write_en   <= 0; 
read_en    <= 1;
#100;
address    <= `gr15;
#100;
address    <= `gr14;
#100;
address    <= `gr13;
#100;
address    <= `gr12;
#100;
address    <= `gr11;
#100;
address    <= `gr10;
#100;
address    <= `gr9;
#100;
address    <= `gr8;
#100;
address    <= `gr7;
#100;
address    <= `gr6;
#100;
address    <= `gr5;
#100;
address    <= `gr4;
#100;
address    <= `gr3;
#100;
address    <= `gr2;
#100;
address    <= `gr1;
#100;
address    <= `gr0;
#100;
address    <= `gr15;
#100;
address    <= `gr14;
#100;
address    <= `gr13;
#100;
address    <= `gr12;
#100;
address    <= `gr11;
#100;
address    <= `gr10;
#100;
address    <= `gr9;
#100;
address    <= `gr8;
#100;
address    <= `gr7;
#100;
address    <= `gr6;
#100;
address    <= `gr5;
#100;
address    <= `gr4;
#100;
address    <= `gr3;
#100;
address    <= `gr2;
#100;
address    <= `gr1;
#100;
address    <= `gr0;
#100;
                write_en = 1;
clr      = 0;
// Add stimulus here
                #100;
address    <= `gr0;
write_data <= 16'hffff;
#100;
address    <= `gr1;
write_data <= 16'h00ff;
#100;
address    <= `gr2;
write_data <= 16'hff00;
#100;
address    <= `gr3;
write_data <= 16'h0ff0;
#100;
address    <= `gr4;
write_data <= 16'hf000;
#100;
address    <= `gr5;
write_data <= 16'h0f00;
#100;
address    <= `gr6;
write_data <= 16'h00f0;
#100;
address    <= `gr7;
write_data <= 16'h000f;
#100;
address    <= `gr8;
write_data <= 16'hff00;
#100;
address    <= `gr9;
write_data <= 16'hff11;
#100;
address    <= `gr10;
write_data <= 16'h1234;
#100;
address    <= `gr11;
write_data <= 16'hff11;
#100;
address    <= `gr12;
write_data <= 16'hff00;
#100;
address    <= `gr13;
write_data <= 16'h001f;
#100;
address    <= `gr14;
write_data <= 16'hf111;
#100;
address    <= `gr15;
write_data <= 16'habcd;


#100; 
write_en   <= 0; 
read_en    <= 1;
#100;
address    <= `gr15;
#100;
address    <= `gr14;
#100;
address    <= `gr13;
#100;
address    <= `gr12;
#100;
address    <= `gr11;
#100;
address    <= `gr10;
#100;
address    <= `gr9;
#100;
address    <= `gr8;
#100;
address    <= `gr7;
#100;
address    <= `gr6;
#100;
address    <= `gr5;
#100;
address    <= `gr4;
#100;
address    <= `gr3;
#100;
address    <= `gr2;
#100;
address    <= `gr1;
#100;
address    <= `gr0;

                #100;
write_en   <= 1;
read_en    <= 0;
#100;
address    <= `gr0;
write_data <= 16'hffff;
#100;
address    <= `gr1;
write_data <= 16'h00ff;
#100;
address    <= `gr2;
write_data <= 16'hef00;
#100;
address    <= `gr3;
write_data <= 16'hfff0;
#100;
address    <= `gr4;
write_data <= 16'hf0f0;
#100;
address    <= `gr5;
write_data <= 16'h0f00;
#100;
address    <= `gr6;
write_data <= 16'h0ff0;
#100;
address    <= `gr7;
write_data <= 16'h0002;
#100;
address    <= `gr8;
write_data <= 16'hffff;
#100;
address    <= `gr9;
write_data <= 16'h0000;
#100;
address    <= `gr10;
write_data <= 16'hff34;
#100;
address    <= `gr11;
write_data <= 16'hee11;
#100;
address    <= `gr12;
write_data <= 16'hffe0;
#100;
address    <= `gr13;
write_data <= 16'h0f1f;
#100;
address    <= `gr14;
write_data <= 16'hff11;
#100;
address    <= `gr15;
write_data <= 16'ha11d;


#100; 
write_en   <= 0; 
read_en    <= 1;
#100;
address    <= `gr15;
#100;
address    <= `gr14;
#100;
address    <= `gr13;
#100;
address    <= `gr12;
#100;
address    <= `gr11;
#100;
address    <= `gr10;
#100;
address    <= `gr9;
#100;
address    <= `gr8;
#100;
address    <= `gr7;
#100;
address    <= `gr6;
#100;
address    <= `gr5;
#100;
address    <= `gr4;
#100;
address    <= `gr3;
#100;
address    <= `gr2;
#100;
address    <= `gr1;
#100;
address    <= `gr0;
#100;
address    <= `gr15;
#100;
address    <= `gr14;
#100;
address    <= `gr13;
#100;
address    <= `gr12;
#100;
address    <= `gr11;
#100;
address    <= `gr10;
#100;
address    <= `gr9;
#100;
address    <= `gr8;
#100;
address    <= `gr7;
#100;
address    <= `gr6;
#100;
address    <= `gr5;
#100;
address    <= `gr4;
#100;
address    <= `gr3;
#100;
address    <= `gr2;
#100;
address    <= `gr1;
#100;
address    <= `gr0;
#100;
                write_en = 1;
clr      = 0;
// Add stimulus here
                #100;
address    <= `gr0;
write_data <= 16'hffff;
#100;
address    <= `gr1;
write_data <= 16'h00ff;
#100;
address    <= `gr2;
write_data <= 16'hff00;
#100;
address    <= `gr3;
write_data <= 16'h0ff0;
#100;
address    <= `gr4;
write_data <= 16'hf000;
#100;
address    <= `gr5;
write_data <= 16'h0f00;
#100;
address    <= `gr6;
write_data <= 16'h00f0;
#100;
address    <= `gr7;
write_data <= 16'h000f;
#100;
address    <= `gr8;
write_data <= 16'hff00;
#100;
address    <= `gr9;
write_data <= 16'hff11;
#100;
address    <= `gr10;
write_data <= 16'h1234;

endmodule

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

数字电路设计之低功耗设计方法二:memory-partition 的相关文章

  • 在verilog中使用for循环生成

    我试图理解为什么我们在verilog 中使用generate 和for 循环 一起使用生成和 for 循环 reg 3 0 temp genvar i generate for i 0 i lt 3 i i 1 begin always p
  • 为什么我的输出没有被赋值?

    我正在为一个更大项目的一部分开发解码器 我有两个计数器充当该模块的输入 其中一个计数器计数 0 15 另一个计数器在第一个计数器达到 15 时递增一次 根据计数器的值 解码器输出不同的值 通常它是 0 1 或 1 但有时它必须是 0 707
  • Verilog HDL 循环语句错误:具有非常量循环条件的循环必须终止

    我对 Verilog 完全陌生 对于我在大学学习的课程 我必须很快了解它的很多内容 我正在摆弄我的 Altera DE2 板和 quartis2 并了解其细节 我正在尝试制作一个通过开关打开和关闭的计数器 到目前为止 计数器根据按键进行计数
  • 比较数字进行排序然后得到中值

    使用按位或比较运算符对五个整数进行排序可以通过以下方式实现 首先获取最大的数字 然后获取第二大的数字 然后获取第三大的数字 依此类推 这是我获取最高数字的代码 include
  • |变量在verilog中是什么意思?

    我想知道什么assign hd trs detected hd trs match Verilog 中的意思 我最感兴趣的是 hd trs match部分 我知道 表示按位或 但不确定如何解释它之前没有值 它是可理解的 1 还是 0 如果它
  • 如何使用触发器输出作为复位信号的输入

    我在柜台里放了 3D 触发器 一旦达到 5 101 我想将 FF 复位输入设置为高 使用或门 复位为低电平有效 这几乎可以工作 但是 当我最初运行程序时 触发器的 Q 输出都是未知的 因此 最初 或门的复位输入为低电平 但是 因为一开始 Q
  • Verilog、FPGA、统一寄存器的使用

    我有一个问题 关于我正在开发的 AGC SPI 控制器在我看来奇怪的行为 它是用 Verilog 完成的 针对的是 Xilinx Spartan 3e FPGA 该控制器是一个依赖外部输入来启动的 FSM FSM的状态存储在状态寄存器它没有
  • 简单赋值时不输出期望值

    当我将一些值分配给具有四位的变量时 当我简单地输出该值时 我会得到意想不到的结果 我以前从未见过这个 想知道我是否在语法上做错了什么 module main reg 3 0 x initial begin monitor b x x 001
  • EDAplayground 中不显示时钟波形

    当尝试在 EDA Playground 中显示时钟波形时 出现错误 执行中断或达到最大运行时间 如何显示波形 EDA Playground 上的代码 module test reg clk initial begin dumpfile du
  • 修改后的 baugh-wooley 算法乘法 verilog 代码不能正确乘法

    以下 verilog 源代码和 或测试平台可以很好地工作商业模拟器 iverilog https www edaplayground com x 3TuQ也形式化验证工具 yosys smtbmc https gist github com
  • 「HDLBits题解」Gates4

    本专栏的目的是分享可以通过HDLBits仿真的Verilog代码 以提供参考 各位可同时参考我的代码和官方题解代码 或许会有所收益 题目链接 Gates4 HDLBits module top module input 3 0 in out
  • 使用双寄存器方法解决亚稳态问题

    为了解决Verilog中不同时钟域引起的亚稳态 采用双寄存器方法 但据我所知 亚稳态的最终输出尚未确定 输出独立于输入 那么 我的问题是如何保证使用双寄存器方法输出的正确性 Thanks 您不能完全确定您避免了亚稳态 正如您所提到的 亚稳态
  • 向左旋转 verilog 大小写

    我的任务是用verilog编写一个16位ALU 当我做需要旋转操作数和进行2的补码加法和减法的部分时 我发现了困难 我知道如何用纸和铅笔解决这个问题 但我无法弄清楚如何在 Verilog 中做到这一点 例如 A表示为a15 a14 a13
  • 在 Verilog 设计中产生时钟故障

    我正在使用 Verilog 设计芯片 我有一个 3 位计数器 我希望当计数器处于第 8 次循环时 应该有一个时钟故障 之后就可以正常工作了 在 Verilog 设计中产生时钟故障的可能方法是什么 在时钟信号上注入毛刺的一种方法是使用forc
  • 具有 +1 逻辑的 4 位计数器 D 触发器

    我正在尝试通过 Verilog 实现带有 1 逻辑的 D 触发器计数器 但是我收到了很多有关网络多个常量驱动程序的错误代码 有人可以帮我吗 这是到目前为止的代码 module LAB clk clear Enable Q input clk
  • 在测试台中显示信号名称/文字

    是否可以在 Verilog 中引用 显示信号的名称 文字 对于在 Verilog 测试台中创建通用信号检查功能来说 这将是一个有用的功能 我知道使用 display 时 m 将打印信号的范围 是否有显示信号名称的等效项 在 Verilog
  • VIM 高亮匹配开始/结束

    我正在尝试找到一个插件 它将突出显示与 Verilog 匹配的开始 结束语句 VIM 可以使用花括号 方括号 但不能使用它的开始 结束 我希望 VIM 突出显示正确的开始到正确的结束 在我看来 最好的选择是使用 matchit 该脚本是 v
  • 如何在 Verilog 中推断 Block RAM

    我在一个项目中遇到了一个非常具体的问题 这个问题已经困扰我好几天了 我有以下 RAM 模块的 Verilog 代码 module RAM param clk addr read write clear data in data out pa
  • Verilog 数组语法

    我是 Verilog 新手 并且遇到了很多麻烦 例如 我想要一个包含八个单元的数组 每个单元都是 8 位宽 以下不起作用 reg 7 0 transitionTable 0 7 assign transitionTable 0 10 仅仅做
  • Verilog 中如何使用函数?

    在我的 FPGA Verilog 课程中 我的教授只是回顾了函数 他说在函数中 你可以按程序编写代码 然后 当您想要调用该函数时 您可以在always块中调用它 即 程序性地 也可以使用分配语句来调用它 对我来说 如何使用过程代码编写函数

随机推荐

  • 【JavaScript】Math 对象

    Math 对象 Math 对象是 JS 的内置对象 可以直接使用 console log typeof Math Math object Math abs acos 常用属性 Math PI 圆周率 3 141592653589793 常用
  • ScrollView嵌套RecyclerView滑动冲突相关问题

    出现了滑动冲突问题 主要表现为横向RecyclerView滑动不灵敏 纵向RecyclerView滑动卡顿 scrollview里面放Recyclerview 会导致view不回收 内存压力大 最好使用 Recyclerview通过Item
  • 带过渡动画的折叠收缩布局ExpandLayout

    ExpandLayout 简介 由于界面View VISIBLE和View GONE的动画太生硬 所以写了ExpandLayout类来平滑过渡 基本思路 动态的设置布局的高度 核心动画效果代码 切换动画实现 private void ani
  • Android面试题——javaMVC、AndroidMVC

    中的 模型 对象 是应用程序的主体部分 多有业务逻辑都应该放到该层 视图 对象 是应用程序中负责生成用户界面的部分 也是整个 架构中用户唯一可以看到的一层 接受用户的输入 显示处理结果 3 控制器 controller 对象 是根据用户的输
  • python3代码提示怎么设置-PyCharm里面配置第三方库的代码自动提示

    最近开始用 PyCharm 编辑器来编写 python 代码了 安装了 GUI 库 wxPython 之后 发现没有代码提示 写起来很是不爽 几经周折之后发现还是得配置一下 因为自己也找了蛮久 所以记录一下 希望可以帮到打击 其他第三方库的
  • 微信小程序纯css实现刻度尺

    微信小程序纯css实现刻度尺 最近需要实现一个高度定制的刻度尺 但是网上现成的方案却是极少 最终找到了HaoTian的wx scale 但是没有实现竖向的效果而且刻度范围大时 在安卓机上无法渲染完全 找了很久没有找到原因 猜测是canvas
  • 为什么c语言有时候要两个括号,头文件中为什么要用了两个括号?

    在研究MD5算法 发现它的头文件MD5 h有 MD5 context typedef struct UINT4 state 4 state ABCD UINT4 count 2 number of bits modulo 2 64 lsb
  • cisco配置WEB登录的方法

    要启用路由器的 HTTP HTTPS 服务器 请使用下列 Cisco IOS 命令 Router config ip http server Router config ip http secure server Router config
  • 不走弯路,ubuntu系统GPU版本的Pytorch安装

    需先查看电脑是否安装了显卡驱动 nvidia smi 有表格样页面输出则安装了 如果没有 sudo ubuntu drivers devices 查看可安装版本 选择最高安装 sudo apt install nvidia driver 5
  • 用Python爬取了上W表情包。快拿去欢乐斗图吧~

    导语 表情包 是一种利用图片来表示感情的一种方式 表情包是在社交软件活跃之后 形成的一种流行文化 表情包流行于互联网上面 基本人人都会发表情 曾经你是否也有过找不到表情包去应对别人的时候 别担心 今天小编将分享如何用Python爬取批量表情
  • 【核磁共振成像】单射成像和高速脉冲序列

    目录 一 提高成像速度的手段 二 平面回波成像 EPI 序列 三 常用或基本EPI序列 四 EPI变型序列 五 渐开平面螺旋 spiral 扫描序列 六 RARE序列 七 GRASE序列 八 STEAM序列 一 提高成像速度的手段 MRI扫
  • Docker容器安装Mysql和Redis(3)

    前言 容器安装的好处是 相互隔离互不影响 相比于传统的一个linux下安装多个服务 其中一个服务报错可能影响其他服务的问题 现在一个服务就是一个容器互不影响 目录 1 安装MySQL 1 1 拉取镜像 1 2 创建并启动 1 3 外部创建映
  • ES设置常规数据字段属性

    index 是否可被搜索 示例如下 PUT es 0001 mappings properties name type keyword index false POST es 0001 doc name James GET es 0001
  • 两个苹果手机如何同步数据_旧苹果手机数据迁移到新手机教程

    很多知友私信提问如何将旧苹果手机数据迁移到新苹果手机上 由于没有像安卓那样一键操作的软件 所以大部分机友束手无策 今天我在这里给大家介绍几种方法 一 从icloud云备份恢复设备 1 打开您的iPhone 您应该会看到 您好 屏幕 如果您的
  • 为什么国内互联网公司喜欢用Centos而不是Ubuntu?

    几乎所有新手接触Linux时 都会被它的几百个发行版本搞得一头雾水 在众多Linux 版本中 CentOS 和 Ubuntu 可以说是最有名的两个了 而关于这两者的选择也是大家在网络上经常讨论的问题 比如各大网站都有热门问题 为什么国内互联
  • 七、Linux中的进程管理

    七 Linux中的进程管理 7 1 进程和线程定义 程序是静态的代码文件 进程 进程是指程序运行时的形态 是程序的一个副本 进程是有生命周期的 准备期 运行期 终止期 线程 当程序是多任务的 cpu是多核心 多任务同时被每个核心处理 每个核
  • ThinkPHP3.2.3学习笔记1---控制器

    ThinkPHP是为了简化企业级应用开发和敏捷WEB应用开发而诞生的 最早诞生于2006年初 2007年元旦正式更名为ThinkPHP 并且遵循Apache2开源协议发布 ThinkPHP从诞生以来一直秉承简洁实用的设计原则 在保持出色的性
  • Python基本语法

    文章目录 Python 基础语法 行缩进 代码行处理 引用import 输入和输出 Python 基础语法 本文主要讲解Python的特殊的语法 行缩进 Python的代码块不是使用 而是使用缩进 正确示例 if True print An
  • 深入浅出UML类图

    在UML 2 0的13种图形中 类图是使用频率最高的UML图之一 Martin Fowler在其著作 UML Distilled A Brief Guide to the Standard Object Modeling Language
  • 数字电路设计之低功耗设计方法二:memory-partition

    Memory partition是在进行内存寻址进行读或者写数据的时候 我们寻找地址一般是全部比较一遍 但是我们可以就是先比较第一位 然后在比较接下来的位数 这样就减少了近一般的内存访问次数 大大降低了功耗 在这里 我定义了地址空间为十六