CCIE 发表于 2010-6-28 00:58:16

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

ATA 发表于 2010-6-28 02:18:32

大家给点想法吧,不管对的还是错的

FFT 发表于 2010-6-28 03:28:03

好象是CASE语句综合成的~!

ATA 发表于 2010-6-28 05:22:55

是啊,这里的存储器是case语句生成的,但以前写过的七段码译码电路也有case,但却没生成存储器,这是为什么呢?

longtime 发表于 2010-6-28 06:34:24

case是不是都会生成LUT(差不多就是mem)啊?请教一下
        http://bbs.vibesic.com/images/smilies/default/loveliness.gif
<br>
<br>
LZ以前的七段码译码电路是不是用组合逻辑写的?用的阻塞赋值?

CHA 发表于 2010-6-28 08:16:48

这个应该是在综合CASE语句对KEYVAL的赋值时产生的。楼主可以看看SYNPLICITY的综合工具手册,其中RAM或ROM的引用可以用CASE语句完成。希望对LZ有用。

CHAN 发表于 2010-6-28 09:57:41

case不一定都会生成mem,我试过的。我的七段码译码电路的确是用组合逻辑写的,阻塞赋值

interi 发表于 2010-6-28 10:40:54

谢谢你的指点!

ups 发表于 2010-6-28 11:30:13

是不是就是说在时序逻辑下的case语句就能生成mem了?请教一下大家

HANG 发表于 2010-6-28 12:41:14

看不明白!!!!!!!!
页: [1] 2
查看完整版本: verilog怎么才会自动生成ram或rom?