IG牛逼,然而我下午在做题
【每日一题】一起学Verilog
001.
002.
003.
004.
005.
006.
007.
008.
0091.
010.
011.
012.
013.
014.
015.
016.
017.
018.
019.
020.
021.
022.
023.
024.
025.
4:经典例题 ★
026.
027.
028.
029.
030.
031.
032.
033.
034.
035.
036.
037.
038.
039.
040.
041.
042.
043.
044.
045.
046.
047.
048.
049.
050.
051.
052.
053.
054.
055.
056.
057.
058.
module fifo(clk,rst,wr_en,rd_en,data_in,data_out,e
input clk,rst;
input wr_en,rd_en;
input [7:0]data_in;//输入数据
output [7:0]data_out;//输出数据
output empty,full;//空满标志
wire empty,full;
reg [7:0]data_out;
reg [7:0] ram[15:0];//dual port RAM
reg [3:0] wr_ptr,rd_ptr;//写和读指针
reg [3:0] counter;//用来判断空满
always@(posedge clk)
begin
if(!rst)
begin
counter=0;
data_out=0;
wr_ptr=0;
rd_ptr=0;
end
else
begin
case({wr_en,rd_en})
2'b00: counter=counter;
2'b01:
begin
data_out=ram[rd_ptr];//先进先出,因此读的话依旧按照次序来
counter=counter-1;
rd_ptr=(rd_ptr==15)?0:rd_ptr+1;
end
2'b10:
begin
ram[wr_ptr]=data_in;//写操作
counter=counter+1;
wr_ptr=(wr_ptr==15)?0:wr_ptr+1;
end
2'b11:
begin
ram[wr_ptr]=data_in;//读写同时进行,此时counter不增加
data_out=ram[rd_ptr];
wr_ptr=(wr_ptr==15)?0:wr_ptr+1;
rd_ptr=(rd_ptr==15)?0:rd_ptr+1;
end
endcase
end
end
assign empty=(counter==0)?1:0;
assign full =(counter==15)?1:0;
endmodule
059.
060.
061.
062.
063.
064.
065.
066.
067.
068.
069.
070.
071.
072.
073.
074.
075.
076.
077.
078.
四、4位超前进位加法器的实现
4.1 原理
4.2 原理图
4.3 Verilog 实现4位超前加法器
079.
080.
081.
082.
083.
084.
085.
086.
087.
088.
089.
090.
091.
092.
093.
094.
095.
096.
097.
098.
099.