verilog怎么才会自动生成ram或rom?
verilog怎么才会自动生成ram或rom?下面的代码编译后报告中提示用到了1024memory bits,以前编过一些程序,用到过reg型变量,也用过case语句,但没使用到memory bits,不知道为什么在这个程序中占用了一些memory bits。请大家帮我看看,先谢了。这是一个4*4键盘程序,实际中可以用的
module key(clk,col,row,key_value,flag_out);
input clk;
input col;
output row,key_value;
output flag_out;
reg row,key_value;
reg flag_out;
reg x_value,keyval;
reg xy_value;
reg hit_flag;
always @(posedge clk)// 时钟1ms,循环行扫描发生电路
begin
if(x_value==4'b0111)
x_value<=4'b1110;
else
x_value<={x_value,1'b1};
row<=x_value;
end
always @(posedge clk)
begin
if(col==4'b1111)
if (hit_flag==1)//在按键发生后输出键值及通知信号flag_out=1
begin
flag_out<=1;
hit_flag<=0;
key_value<=keyval;
end
else
flag_out<=0;//没有按键flag_out=0
else
begin //扫描到按键时进行键值译码
flag_out<=0; //译码过程中不输出
hit_flag<=1;//说明有按键了
xy_value<={col,row};
case(xy_value)
8'b11101110:keyval<=4'b0000;//0
8'b11011110:keyval<=4'b0001;//1
8'b10111110:keyval<=4'b0010;//2
8'b01111110:keyval<=4'b0011;//3
8'b11101101:keyval<=4'b0100;//4
8'b11011101:keyval<=4'b0101;//5
8'b10111101:keyval<=4'b0110;//6
8'b01111101:keyval<=4'b0111;//7
8'b11101011:keyval<=4'b1000;//8
8'b11011011:keyval<=4'b1001;//9
8'b10111011:keyval<=4'b1010;//A
8'b01111011:keyval<=4'b1011;//B
8'b11100111:keyval<=4'b1100;//C
default:keyval<=4'b0000;
endcase
end
end
endmodule 大家给点想法吧,不管对的还是错的 好象是CASE语句综合成的~! 是啊,这里的存储器是case语句生成的,但以前写过的七段码译码电路也有case,但却没生成存储器,这是为什么呢? case是不是都会生成LUT(差不多就是mem)啊?请教一下
http://bbs.vibesic.com/images/smilies/default/loveliness.gif
<br>
<br>
LZ以前的七段码译码电路是不是用组合逻辑写的?用的阻塞赋值? 这个应该是在综合CASE语句对KEYVAL的赋值时产生的。楼主可以看看SYNPLICITY的综合工具手册,其中RAM或ROM的引用可以用CASE语句完成。希望对LZ有用。 case不一定都会生成mem,我试过的。我的七段码译码电路的确是用组合逻辑写的,阻塞赋值 谢谢你的指点! 是不是就是说在时序逻辑下的case语句就能生成mem了?请教一下大家 看不明白!!!!!!!!
页:
[1]
2