(sel2sel1sel0=000,001>的的2个数码管显示ROM内容。
此方案的优点:
结果判读直观
缺点:
附加电路稍复杂。
层次式显示:
rom256_8_led.gdf:
字节→半字节分离电路half_byte的AHDL描述:
subdesignhalf_byte
(
din[7..0]:
input。
sel0:
input。
dout[3..0]:
output。
>
beginif!
sel0thendout[3..0]=din[3..0]。
elsedout[3..0]=din[7..4]。
endif。
0YujCfmUCw
end。
1、写出你在实验中自定义的存储器初始化文件<.mif文件)的内容<要求与示例不同)
DEPTH=256。
%Memorydepthandwidtharerequired%WIDTH=8。
%Enteradecimalnumber%ADDRESS_RADIX=HEX。
%Addressandvalueradixesareoptional%DATA_RADIX=HEX。
%EnterBIN,DEC,HEX,orOCT。
unless%%otherwisespecified,radixes=HEX%--Specifyvaluesforaddresses,whichcanbesingleaddressorrangeCONTENTBEGIN[0..F]:
00。
%Range--addressfrom0toF=00%[10..1F]:
11。
%Range--addressfrom10to1F=11%[20..2F]:
22。
%Range--addressfrom20to2F=22%[30..3F]:
33。
%Range--addressfrom30to3F=33%[40..4F]:
44。
%Range--addressfrom40to4F=44%[50..5F]:
55。
%Range--addressfrom50to5F=55%[60..6F]:
66。
%Range--addressfrom60to6F=66%[70..7F]:
77。
%Range--addressfrom70to7F=77%[80..8F]:
88。
%Range--addressfrom80to8F=88%[90..9F]:
99。
%Range--addressfrom90to9F=99%[A0..AF]:
AA。
%Range--addressfromA0toAF=AA%[B0..BF]:
BB。
%Range--addressfromB0toBF=BB%[C0..CF]:
CC。
%Range--addressfromC0toCF=CC%[D0..DF]:
DD。
%Range--addressfromD0toDF=DD%[E0..EF]:
EE。
%Range--addressfromE0toEF=EE%[F0..FF]:
FF。
%Range--addressfromF0toFF=FF%ENDeUts8ZQVRd
2、假定要用LPM_ROM实现4位二进制码到典型gray码的转换,请你画出ROM阵列图,确定ROM容量,并由此给出LPM_ROM的配置参数和.mif文件内容。
sQsAEJkW5T
:
容量为2^4*4
Mif文件:
DEPTH=16;WIDTH=4
3、实验存在的问题和解决方法。
不同的rom需要设置不同的参数
实验九:
任意整数分频器设计
实验内容
通过File-New新建一个VerilogHDLFile,输入图4和图5所示内容/引导的注释可不输),并存盘为int_div.v,并加入工程<也可直接将提供的int_div.v作为元件加入到工程中)。
这是一个任意整数分频模块GMsIasNXkA
//*******************************************************//TIrRGchYzg
//任意整数分频模块//
//*******************************************************//7EqZcWLZNX
//功能:
对输入时钟clock进行F_DIV倍分频后输出clk_out。
//其中F_DIV为分频系数,分频系数范围为1~2^n(n=F_DIV_WIDTH>
//若要改变分频系数,改变参数F_DIV或F_DIV_WIDTH到相应范围即可。
//若分频系数为偶数,则输出时钟占空比为50%;
//若分频系数为奇数,则输出时钟占空比取决于输入时钟占空比和分
//频系数<当输入为50%时,输出也是50%)。
//--------------------------------------------------------lzq7IGf02E
//奇数倍分频:
三倍分频的时序图如下所示。
//123456
//clock|--|__|--|__|--|__|--|__|--|__|--|__|
//clk_p_r|_____|-----------|_____|-----------|
//clk_n_r---|_____|-----------|_____|---------
//clk_out|________|--------|________|--------|
moduleint_div(clock,clk_out>。
//I/O口声明
inputclock。
//输入时钟
outputclk_out。
//输出时钟
//内部寄存器
regclk_p_r。
//上升沿输出时钟
regclk_n_r。
//下降沿输出时钟
reg[F_DIV_WIDTH-1:
0]count_p。
//上升沿脉冲计数器
reg[F_DIV_WIDTH-1:
0]count_n。
//下降沿脉冲计数器
//参数--分频系数
parameterF_DIV=48000000。
//分频系数<<<<-----修改这里
parameterF_DIV_WIDTH=32。
//分频计数器宽度
wirefull_div_p。
//上升沿计数满标志
wirehalf_div_p。
//上升沿计数半满标志
wirefull_div_n。
//下降沿计数满标志
wirehalf_div_n。
//下降沿计数半满标志
//判断计数标志位置位与否
assignfull_div_p=(count_p。
assignhalf_div_p=(count_p<(F_DIV>>1>-1>。
assignfull_div_n=(count_n。
assignhalf_div_n=(count_n<(F_DIV>>1>-1>。
//时钟输出
assignclk_out=(F_DIV==1>?
clock:
(F_DIV[0]?
(clk_p_r&clk_n_r>:
clk_p_r>。
zvpgeqJ1hk
//上升沿脉冲计数
always@(posedgeclock>
begin
if(full_div_p>
begin
count_p<=count_p+1'b1。
if(half_div_p>
clk_p_r<=1'b0。
else
clk_p_r<=1'b1。
end
else
begin
count_p<=0。
clk_p_r<=1'b0。
end
end
//下降沿脉冲计数
always@(negedgeclock>
begin
if(full_div_n>
begin
count_n<=count_n+1'b1。
if(half_div_n>
clk_n_r<=1'b0。
else
clk_n_r<=1'b1。
end
else
begin
count_n<=0。
clk_n_r<=1'b0。
end
end
endmodule
申明:
所有资料为本人收集整理,仅限个人学习使用,勿做商业用途。